Mercurial > hg > may
comparison yetilab/matrix/matrix.yeti @ 246:58e98d146dc1 sparse
Sparsity is actually density
author | Chris Cannam |
---|---|
date | Mon, 20 May 2013 18:11:20 +0100 |
parents | 91bde82e34eb |
children | 1ea5bf6e76b6 |
comparison
equal
deleted
inserted
replaced
245:91bde82e34eb | 246:58e98d146dc1 |
---|---|
44 esac; | 44 esac; |
45 | 45 |
46 width m = (size m).columns; | 46 width m = (size m).columns; |
47 height m = (size m).rows; | 47 height m = (size m).rows; |
48 | 48 |
49 sparsity m = | 49 density m = |
50 ({ rows, columns } = size m; | 50 ({ rows, columns } = size m; |
51 cells = rows * columns; | 51 cells = rows * columns; |
52 nonZeroCells d = | 52 nonZeroCells d = |
53 sum | 53 sum |
54 (map do v: | 54 (map do v: |
354 generate do row col: abs (getAt row col m) done (size m); | 354 generate do row col: abs (getAt row col m) done (size m); |
355 | 355 |
356 //!!! todo: proper sparse multiply | 356 //!!! todo: proper sparse multiply |
357 product m1 m2 = | 357 product m1 m2 = |
358 if (size m1).columns != (size m2).rows | 358 if (size m1).columns != (size m2).rows |
359 then failWith "Matrix dimensions incompatible: \(size m1), \(size m2) (\((size m1).columns != (size m2).rows)"; | 359 then failWith "Matrix dimensions incompatible: \(size m1), \(size m2) (\((size m1).columns) != \((size m2).rows))"; |
360 else | 360 else |
361 generate do row col: | 361 generate do row col: |
362 bf.sum (bf.multiply (getRow row m1) (getColumn col m2)) | 362 bf.sum (bf.multiply (getRow row m1) (getColumn col m2)) |
363 done { rows = (size m1).rows, columns = (size m2).columns } | 363 done { rows = (size m1).rows, columns = (size m2).columns } |
364 fi; | 364 fi; |
461 | 461 |
462 { | 462 { |
463 size, | 463 size, |
464 width, | 464 width, |
465 height, | 465 height, |
466 sparsity, | 466 density, |
467 getAt, | 467 getAt, |
468 getColumn, | 468 getColumn, |
469 getRow, | 469 getRow, |
470 isRowMajor?, | 470 isRowMajor?, |
471 isSparse?, | 471 isSparse?, |
505 //!!! check whether these are right to be .selector rather than just selector | 505 //!!! check whether these are right to be .selector rather than just selector |
506 | 506 |
507 size is matrix -> { .rows is number, .columns is number }, | 507 size is matrix -> { .rows is number, .columns is number }, |
508 width is matrix -> number, | 508 width is matrix -> number, |
509 height is matrix -> number, | 509 height is matrix -> number, |
510 sparsity is matrix -> number, | 510 density is matrix -> number, |
511 getAt is number -> number -> matrix -> number, | 511 getAt is number -> number -> matrix -> number, |
512 getColumn is number -> matrix -> vector, | 512 getColumn is number -> matrix -> vector, |
513 getRow is number -> matrix -> vector, | 513 getRow is number -> matrix -> vector, |
514 isRowMajor? is matrix -> boolean, | 514 isRowMajor? is matrix -> boolean, |
515 isSparse? is matrix -> boolean, | 515 isSparse? is matrix -> boolean, |