Mercurial > hg > may
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fmatrix.yeti Thu Dec 13 11:13:35 2012 +0000 @@ -0,0 +1,77 @@ +module fmatrix; + +vec = load fvector; + +zeroMatrix rows cols = array (map \(vec.zeros cols) [1..rows]); + +generateMatrix f rows cols = + (m = zeroMatrix rows cols; + for [0..rows-1] do row: + for [0..cols-1] do col: + m[row][col] := f row col; + done; + done; + m); + +constMatrix n = generateMatrix do row col: n done; +randomMatrix = generateMatrix do row col: Math#random() done; +identityMatrix = constMatrix 1; + +width m = if length m > 0 then vec.vectorLength m[0] else 0 fi; +cols = width; + +height m = length m; +rows = height; + +dimensions m = { cols = width m, rows = height m }; + +copyOfMatrix m = array (map vec.copyOfVector m); + +transposed m is array<~double[]> -> array<~double[]> = + generateMatrix do row col: m[col][row] done (cols m) (rows m); + +interleaved m = + ({ cols, rows } = dimensions m; + v = vec.zeros (cols * rows); + for [0..rows-1] do row: + for [0..cols-1] do col: + v[col * rows + row] := m[row][col]; + done; + done; + v); + +deinterleaved rows v is number -> ~double[] -> array<~double[]> = + generateMatrix do row col: + v[rows * col + row] + done rows ((vec.vectorLength v) / rows); + +mixedDown m = + (if empty? m then vec.zeros 0 else + { cols, rows } = dimensions m; + v = vec.copyOfVector m[0]; + for [1..rows-1] do row: + for [0..cols-1] do col: + v[col] := v[col] + m[row][col]; + done; + done; + v; + fi); + +mixedDownFromInterleaved rows v is number -> ~double[] -> ~double[] = + (cols = ((vec.vectorLength v) / rows); + v' = vec.zeros cols; + for [0..rows-1] do row: + for [0..cols-1] do col: + v'[col] := v'[col] + v[col * rows + row]; + done; + done; + v'); + +{ +generateMatrix, constMatrix, randomMatrix, zeroMatrix, identityMatrix, +width, cols, height, rows, dimensions, +copyOfMatrix, +transposed, interleaved, deinterleaved, +mixedDown, mixedDownFromInterleaved, +} +