Mercurial > hg > may
changeset 550:5d6aeb765804
tiledTo
author | Chris Cannam |
---|---|
date | Tue, 25 Mar 2014 10:32:01 +0000 |
parents | 0905242b46cb |
children | 25800b390b07 f20297bca167 |
files | src/may/matrix.yeti src/may/matrix/test/test_matrix.yeti |
diffstat | 2 files changed, 59 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/may/matrix.yeti Mon Mar 24 12:14:38 2014 +0000 +++ b/src/may/matrix.yeti Tue Mar 25 10:32:01 2014 +0000 @@ -40,6 +40,8 @@ module may.matrix; +{ ceil } = load may.mathmisc; + vec = load may.vector; load yeti.experimental.json; @@ -897,13 +899,37 @@ fi fi); +//!!! doc: always dense repeatedHorizontal n m = - (cols = asColumns m; - fromColumns (fold do acc _: acc ++ cols done [] [1..n])); + (if n == 1 then m + else + cols = asColumns m; + fromColumns (fold do acc _: acc ++ cols done [] [1..n]) + fi); +//!!! doc: always dense repeatedVertical n m = - (rows = asRows m; - fromRows (fold do acc _: acc ++ rows done [] [1..n])); + (if n == 1 then m + else + rows = asRows m; + fromRows (fold do acc _: acc ++ rows done [] [1..n]) + fi); + +//!!! doc: always dense +tiledTo newsize m = + if newsize == size m then + m + elif (height m) == 0 or (width m) == 0 then + zeroMatrixWithTypeOf m newsize; + else + h = ceil (newsize.columns / (width m)); + v = ceil (newsize.rows / (height m)); + if isRowMajor? m then + resizedTo newsize (repeatedHorizontal h (repeatedVertical v m)) + else + resizedTo newsize (repeatedVertical v (repeatedHorizontal h m)) + fi + fi; minValue m = if width m == 0 or height m == 0 then 0 @@ -994,6 +1020,7 @@ entryWiseProduct, entryWiseDivide, resizedTo, + tiledTo, repeatedHorizontal, repeatedVertical, concatHorizontal, @@ -1057,6 +1084,7 @@ 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, + tiledTo is { rows is number, columns is number } -> matrix_t -> matrix_t, repeatedHorizontal is number -> matrix_t -> matrix_t, repeatedVertical is number -> matrix_t -> matrix_t, concatHorizontal is list<matrix_t> -> matrix_t,
--- a/src/may/matrix/test/test_matrix.yeti Mon Mar 24 12:14:38 2014 +0000 +++ b/src/may/matrix/test/test_matrix.yeti Tue Mar 25 10:32:01 2014 +0000 @@ -419,6 +419,33 @@ (mat.toSparse (fromColumns [[1,4],[2,5],[3,6]]))) ), +"tiledTo-\(name)": \( + compareMatrices + (mat.tiledTo { rows = 2, columns = 2 } + (fromColumns [[1,4],[2,5],[3,6]])) + (fromColumns [[1,4],[2,5]]) and + compareMatrices + (mat.tiledTo { rows = 3, columns = 4 } + (fromColumns [[1,4],[2,5],[3,6]])) + (fromColumns [[1,4,1],[2,5,2],[3,6,3],[1,4,1]]) and + compareMatrices + (mat.tiledTo { rows = 7, columns = 2 } + (fromColumns [[1,4],[2,5],[3,6]])) + (fromColumns [[1,4,1,4,1,4,1],[2,5,2,5,2,5,2]]) and + compareMatrices + (mat.tiledTo { rows = 1, columns = 1 } + (fromColumns [[1,4],[2,5],[3,6]])) + (fromRows [[1]]) and + compareMatrices + (mat.tiledTo { rows = 2, columns = 3 } + (mat.zeroMatrix { rows = 0, columns = 0 })) + (fromRows [[0,0,0],[0,0,0]]) and + compareMatrices + (mat.tiledTo { rows = 0, columns = 0 } + (mat.zeroMatrix { rows = 4, columns = 3 })) + (fromRows []) +), + "zeroSizeMatrix-\(name)": \( compareMatrices (mat.zeroMatrix { rows = 0, columns = 0 })