Mercurial > hg > may
changeset 549:0905242b46cb
entryWiseProduct, another one that should have taken a list
author | Chris Cannam |
---|---|
date | Mon, 24 Mar 2014 12:14:38 +0000 |
parents | 712999a0ad66 |
children | 5d6aeb765804 |
files | src/may/matrix.yeti src/may/matrix/test/test_matrix.yeti |
diffstat | 2 files changed, 32 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/src/may/matrix.yeti Mon Mar 24 11:50:05 2014 +0000 +++ b/src/may/matrix.yeti Mon Mar 24 12:14:38 2014 +0000 @@ -682,27 +682,33 @@ fi; fi; -entryWiseProduct m1 m2 = - if (size m1) != (size m2) - then failWith "Matrices are not the same size: \(size m1), \(size m2)"; - else - if isSparse? m1 then - newSparse (size m1) - ((taggerForTypeOf m1) - (map do { i, j, v }: { i, j, v = v * (at' m2 i j) } done - (enumerateSparse m1))) - elif isSparse? m2 then - entryWiseProduct m2 m1 - else - if isRowMajor? m1 then - fromRows (array (map2 do v1 v2: vec.multiply [v1,v2] done - (asRows m1) (asRows m2))); - else - fromColumns (array (map2 do v1 v2: vec.multiply [v1,v2] done - (asColumns m1) (asColumns m2))); - fi - fi - fi; +entryWiseProduct mm = + case mm of + m1::m2::rest: + entryWiseProduct + (if (size m1) != (size m2) + then failWith "Matrices are not the same size: \(size m1), \(size m2)"; + else + if isSparse? m1 then + newSparse (size m1) + ((taggerForTypeOf m1) + (map do { i, j, v }: { i, j, v = v * (at' m2 i j) } done + (enumerateSparse m1))) + elif isSparse? m2 then + entryWiseProduct (m2::m1::rest) + else + if isRowMajor? m1 then + fromRows (array (map2 do v1 v2: vec.multiply [v1,v2] done + (asRows m1) (asRows m2))); + else + fromColumns (array (map2 do v1 v2: vec.multiply [v1,v2] done + (asColumns m1) (asColumns m2))); + fi + fi + fi :: rest); + [m1]: m1; + _: failWith "Empty argument list"; + esac; entryWiseDivide m1 m2 = if (size m1) != (size m2) @@ -1048,7 +1054,7 @@ all is (number -> boolean) -> matrix_t -> boolean, any is (number -> boolean) -> matrix_t -> boolean, product is matrix_t -> matrix_t -> matrix_t, - entryWiseProduct is matrix_t -> matrix_t -> matrix_t, + entryWiseProduct is list?<matrix_t> -> matrix_t, entryWiseDivide is matrix_t -> matrix_t -> matrix_t, resizedTo is { rows is number, columns is number } -> matrix_t -> matrix_t, repeatedHorizontal is number -> matrix_t -> matrix_t,
--- a/src/may/matrix/test/test_matrix.yeti Mon Mar 24 11:50:05 2014 +0000 +++ b/src/may/matrix/test/test_matrix.yeti Mon Mar 24 12:14:38 2014 +0000 @@ -340,13 +340,13 @@ "entryWiseProduct-\(name)": \( compareMatrices (mat.entryWiseProduct - (fromRows [[1,2,3],[4,5,0]]) - (fromRows [[6,7,8],[0,1,2]])) + [fromRows [[1,2,3],[4,5,0]], + fromRows [[6,7,8],[0,1,2]]]) (fromRows [[6,14,24],[0,5,0]]) and compareMatrices (mat.entryWiseProduct - (fromRows [[1,2,3],[4,5,0]]) - (fromColumns [[6,0],[7,1],[8,2]])) + [fromRows [[1,2,3],[4,5,0]], + fromColumns [[6,0],[7,1],[8,2]]]) (fromRows [[6,14,24],[0,5,0]]) ),