# HG changeset patch # User Chris Cannam # Date 1395663278 0 # Node ID 0905242b46cb9c7088292f3be69e8dcb370de514 # Parent 712999a0ad66744f23d7cffab9794b59905479ad entryWiseProduct, another one that should have taken a list diff -r 712999a0ad66 -r 0905242b46cb src/may/matrix.yeti --- 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, 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, diff -r 712999a0ad66 -r 0905242b46cb src/may/matrix/test/test_matrix.yeti --- 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]]) ),