annotate floatrix.yeti @ 7:c5dc45708e74

Finish initial set of functions in primitive-array backed matrix; use in audiofile
author Chris Cannam
date Wed, 12 Dec 2012 17:12:34 +0000
parents 0718b9253e59
children dc72a1d15901
rev   line source
Chris@5 1 module floatrix;
Chris@5 2
Chris@5 3 zeros n = new double[n];
Chris@5 4 ones n = (a = zeros n; for [0..n-1] do i: a[i] := 1.0 done; a);
Chris@5 5
Chris@5 6 zeroMatrix rows cols = array (map \(zeros cols) [1..rows]);
Chris@5 7
Chris@5 8 generateMatrix f rows cols =
Chris@5 9 (m = zeroMatrix rows cols;
Chris@5 10 for [0..rows-1] do row:
Chris@5 11 for [0..cols-1] do col:
Chris@5 12 n = f row col;
Chris@5 13 m[row][col] := n;
Chris@5 14 done;
Chris@5 15 done;
Chris@5 16 m);
Chris@5 17
Chris@5 18 constMatrix n = generateMatrix do row col: n done;
Chris@5 19
Chris@5 20 randomMatrix = generateMatrix do row col: Math#random() done;
Chris@5 21
Chris@5 22 identityMatrix = constMatrix 1;
Chris@5 23
Chris@5 24 arrayWrap a is ~double[] -> array<number> = array(a);
Chris@5 25
Chris@5 26 width m = if length m > 0 then length (arrayWrap m[0]) else 0 fi;
Chris@5 27
Chris@6 28 cols = width;
Chris@6 29
Chris@5 30 height m = length m;
Chris@5 31
Chris@6 32 rows = height;
Chris@6 33
Chris@5 34 dimensions m = { cols = width m, rows = height m };
Chris@5 35
Chris@6 36 transposed m is array<~double[]> -> array<~double[]> =
Chris@6 37 generateMatrix do row col: m[col][row] done (cols m) (rows m);
Chris@6 38
Chris@7 39 interleaved m =
Chris@7 40 ({ cols, rows } = dimensions m;
Chris@7 41 v = zeros (cols * rows);
Chris@7 42 for [0..rows-1] do row:
Chris@7 43 for [0..cols-1] do col:
Chris@7 44 v[col * rows + row] := m[row][col];
Chris@7 45 done;
Chris@7 46 done;
Chris@7 47 v);
Chris@6 48
Chris@7 49 deinterleaved rows v is number -> ~double[] -> 'a =
Chris@5 50 generateMatrix do row col:
Chris@5 51 v[rows * col + row]
Chris@7 52 done rows (length (arrayWrap v) / rows);
Chris@5 53
Chris@5 54 {
Chris@5 55 zeros, ones,
Chris@5 56 generateMatrix, constMatrix, randomMatrix, zeroMatrix, identityMatrix,
Chris@6 57 width, cols, height, rows, dimensions,
Chris@7 58 transposed, interleaved, deinterleaved,
Chris@5 59 }
Chris@5 60