Mercurial > hg > may
changeset 242:0ac8672d12b2 sparse
Add and test sparsity
author | Chris Cannam |
---|---|
date | Mon, 20 May 2013 16:22:17 +0100 |
parents | e777a713027b |
children | 1313764cb89c |
files | yetilab/matrix/matrix.yeti yetilab/matrix/test/test_matrix.yeti |
diffstat | 2 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/yetilab/matrix/matrix.yeti Mon May 20 16:01:43 2013 +0100 +++ b/yetilab/matrix/matrix.yeti Mon May 20 16:22:17 2013 +0100 @@ -46,6 +46,21 @@ width m = (size m).columns; height m = (size m).rows; +sparsity m = + ({ rows, columns } = size m; + cells = rows * columns; + nonZeroCells d = + sum + (map do v: + sum (map do n: if n == 0 then 0 else 1 fi done (vec.list v)) + done d); + case m of + DenseRows d: (nonZeroCells d) / cells; + DenseCols d: (nonZeroCells d) / cells; + SparseCSR d: (vec.length d.values) / cells; + SparseCSC d: (vec.length d.values) / cells; + esac); + sparseSlice n d = (start = d.pointers[n]; end = d.pointers[n+1]; @@ -444,6 +459,7 @@ size, width, height, + sparsity, getAt, getColumn, getRow, @@ -485,6 +501,7 @@ size is matrix -> { .rows is number, .columns is number }, width is matrix -> number, height is matrix -> number, + sparsity is matrix -> number, getAt is number -> number -> matrix -> number, getColumn is number -> matrix -> vector, getRow is number -> matrix -> vector,
--- a/yetilab/matrix/test/test_matrix.yeti Mon May 20 16:01:43 2013 +0100 +++ b/yetilab/matrix/test/test_matrix.yeti Mon May 20 16:22:17 2013 +0100 @@ -348,6 +348,12 @@ (newMatrix (RowMajor ()) [[0,3],[6,7]]) ), +"sparsity-\(name)": \( + compare (mat.sparsity (newMatrix (ColumnMajor ()) [[1,2,0],[0,5,0]])) (3/6) and + compare (mat.sparsity (newMatrix (ColumnMajor ()) [[1,2,3],[4,5,6]])) (6/6) and + compare (mat.sparsity (newMatrix (ColumnMajor ()) [[0,0,0],[0,0,0]])) 0 +), + ]); colhash = makeTests "column-dense" id;