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,