Mercurial > hg > may
changeset 95:5eee42ec5677
Some initial matrix fixes
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 18:28:38 +0000 |
parents | 802b38114065 |
children | a5b4d0f68ca8 |
files | yetilab/matrix/matrix.yeti |
diffstat | 1 files changed, 36 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/yetilab/matrix/matrix.yeti Wed Mar 20 17:48:42 2013 +0000 +++ b/yetilab/matrix/matrix.yeti Wed Mar 20 18:28:38 2013 +0000 @@ -14,31 +14,41 @@ vec = load yetilab.block.fvector; newMatrix data = { - m = data, get cols () = - case m of + case data of RowMajor d: if length d > 0 then vec.length d[0] else 0 fi; ColMajor d: length d; esac, get rows () = - case m of + case data of RowMajor d: length d; ColMajor d: if length d > 0 then vec.length d[0] else 0 fi; esac, col j = - case m of - RowMajor d: fvec.vector (map do i: d[i][j] done [1..length d]); + case data of + RowMajor d: vec.vector (map do i: at i j done [1..length d]); ColMajor d: d[j]; esac, row i = - case m of + case data of RowMajor d: d[i]; - ColMajor d: fvec.vector (map do n: d[j][i] done [1..length d]); + ColMajor d: vec.vector (map do j: at i j done [1..length d]); esac, + at row col = + case data of + RowMajor d: r = d[row]; (r is ~double[])[col]; + ColMajor d: c = d[col]; (c is ~double[])[row]; + esac, + get isRowMajor? () = + case data of + RowMajor _: true; + ColMajor _: false; + esac, + norec data () = data, }; newStorage rows cols = - array (map \(vec.zeros rows)) [1..cols]; + array (map \(vec.zeros rows) [1..cols]); zeroMatrix rows cols = newMatrix (ColMajor (newStorage rows cols)); @@ -60,23 +70,31 @@ height m = m.rows; dimensions m = { cols = m.cols, rows = m.rows }; -tagOf m = case m.m of RowMajor _: RowMajor; ColMajor _: ColMajor esac; +copyOf m = + (copyOfData d = (array (map vec.copyOf d)); + newMatrix + (case m.data of + RowMajor d: RowMajor (copyOfData d); + ColMajor d: ColMajor (copyOfData d); + esac)); -copyOf m = m with { m = ((tagOf m) (array (map vec.copyOf m)); +transposed m = + newMatrix + (case m.data of + RowMajor d: ColMajor d; + ColMajor d: RowMajor d; + esac); -transposed m = m with { - case m.m of - RowMajor d: ColMajor d; - ColMajor d: RowMajor d; - esac, - }; - +/* flippedStorageOrder m is array<~double[]> -> array<~double[]> = generate do row col: m[col][row] done (cols m) (rows m); +*/ { generate, constMatrix, randomMatrix, zeroMatrix, identityMatrix, -width, cols, height, rows, dimensions, +width, // cols, +height, // rows, +dimensions, copyOf, transposed, }