annotate fmatrix.yeti @ 10:149d6911ca12

Split out floatrix to fmatrix, fvector
author Chris Cannam
date Thu, 13 Dec 2012 11:13:35 +0000
parents floatrix.yeti@1c5b70c79859
children 0ddc2aa8885d
rev   line source
Chris@10 1 module fmatrix;
Chris@5 2
Chris@10 3 vec = load fvector;
Chris@9 4
Chris@10 5 zeroMatrix rows cols = array (map \(vec.zeros cols) [1..rows]);
Chris@5 6
Chris@5 7 generateMatrix f rows cols =
Chris@5 8 (m = zeroMatrix rows cols;
Chris@5 9 for [0..rows-1] do row:
Chris@5 10 for [0..cols-1] do col:
Chris@9 11 m[row][col] := f row col;
Chris@5 12 done;
Chris@5 13 done;
Chris@5 14 m);
Chris@5 15
Chris@5 16 constMatrix n = generateMatrix do row col: n done;
Chris@5 17 randomMatrix = generateMatrix do row col: Math#random() done;
Chris@5 18 identityMatrix = constMatrix 1;
Chris@5 19
Chris@10 20 width m = if length m > 0 then vec.vectorLength m[0] else 0 fi;
Chris@6 21 cols = width;
Chris@6 22
Chris@5 23 height m = length m;
Chris@6 24 rows = height;
Chris@6 25
Chris@5 26 dimensions m = { cols = width m, rows = height m };
Chris@5 27
Chris@10 28 copyOfMatrix m = array (map vec.copyOfVector m);
Chris@9 29
Chris@6 30 transposed m is array<~double[]> -> array<~double[]> =
Chris@6 31 generateMatrix do row col: m[col][row] done (cols m) (rows m);
Chris@6 32
Chris@7 33 interleaved m =
Chris@7 34 ({ cols, rows } = dimensions m;
Chris@10 35 v = vec.zeros (cols * rows);
Chris@7 36 for [0..rows-1] do row:
Chris@7 37 for [0..cols-1] do col:
Chris@7 38 v[col * rows + row] := m[row][col];
Chris@7 39 done;
Chris@7 40 done;
Chris@7 41 v);
Chris@6 42
Chris@8 43 deinterleaved rows v is number -> ~double[] -> array<~double[]> =
Chris@5 44 generateMatrix do row col:
Chris@5 45 v[rows * col + row]
Chris@10 46 done rows ((vec.vectorLength v) / rows);
Chris@5 47
Chris@9 48 mixedDown m =
Chris@10 49 (if empty? m then vec.zeros 0 else
Chris@9 50 { cols, rows } = dimensions m;
Chris@10 51 v = vec.copyOfVector m[0];
Chris@9 52 for [1..rows-1] do row:
Chris@9 53 for [0..cols-1] do col:
Chris@9 54 v[col] := v[col] + m[row][col];
Chris@9 55 done;
Chris@9 56 done;
Chris@9 57 v;
Chris@9 58 fi);
Chris@9 59
Chris@9 60 mixedDownFromInterleaved rows v is number -> ~double[] -> ~double[] =
Chris@10 61 (cols = ((vec.vectorLength v) / rows);
Chris@10 62 v' = vec.zeros cols;
Chris@9 63 for [0..rows-1] do row:
Chris@9 64 for [0..cols-1] do col:
Chris@9 65 v'[col] := v'[col] + v[col * rows + row];
Chris@9 66 done;
Chris@8 67 done;
Chris@9 68 v');
Chris@8 69
Chris@5 70 {
Chris@5 71 generateMatrix, constMatrix, randomMatrix, zeroMatrix, identityMatrix,
Chris@6 72 width, cols, height, rows, dimensions,
Chris@10 73 copyOfMatrix,
Chris@7 74 transposed, interleaved, deinterleaved,
Chris@9 75 mixedDown, mixedDownFromInterleaved,
Chris@5 76 }
Chris@5 77