Mercurial > hg > may
comparison yetilab/matrix/matrix.yeti @ 252:efdb1aee9d21
Another minor improvement
author | Chris Cannam |
---|---|
date | Tue, 21 May 2013 14:29:22 +0100 |
parents | 9fe3192cce38 |
children | 5eb57c649de0 8043f7405eae |
comparison
equal
deleted
inserted
replaced
251:9fe3192cce38 | 252:efdb1aee9d21 |
---|---|
69 end = d.pointers[n+1]; | 69 end = d.pointers[n+1]; |
70 { | 70 { |
71 values = vec.slice d.values start end, | 71 values = vec.slice d.values start end, |
72 indices = slice d.indices start end, | 72 indices = slice d.indices start end, |
73 }); | 73 }); |
74 | |
75 nonEmptySlices d = | |
76 (ne = array []; | |
77 for [0..length d.pointers - 2] do i: | |
78 if d.pointers[i] != d.pointers[i+1] then | |
79 push ne i | |
80 fi | |
81 done; | |
82 ne); | |
74 | 83 |
75 fromSlice n m d = | 84 fromSlice n m d = |
76 (slice = sparseSlice n d; | 85 (slice = sparseSlice n d; |
77 var v = 0; | 86 var v = 0; |
78 for [0..length slice.indices - 1] do i: | 87 for [0..length slice.indices - 1] do i: |
387 SparseCSC d: | 396 SparseCSC d: |
388 (e = enumerateSparse m1; | 397 (e = enumerateSparse m1; |
389 entries = | 398 entries = |
390 (map do j': | 399 (map do j': |
391 cs = sparseSlice j' d; | 400 cs = sparseSlice j' d; |
392 if empty? cs.indices then | 401 hin = mapIntoHash |
393 [] | 402 (at cs.indices) ((flip vec.at) cs.values) |
394 else | 403 [0..length cs.indices - 1]; |
395 hin = mapIntoHash | 404 hout = [:]; |
396 (at cs.indices) ((flip vec.at) cs.values) | 405 for e do { v, i, j }: |
397 [0..length cs.indices - 1]; | 406 if j in hin then |
398 hout = [:]; | 407 p = v * hin[j]; |
399 for e do { v, i, j }: | 408 hout[i] := p + (if i in hout then hout[i] else 0 fi); |
400 if j in hin then | 409 fi |
401 p = v * hin[j]; | 410 done; |
402 hout[i] := p + (if i in hout then hout[i] else 0 fi); fi | 411 map do i: |
403 done; | 412 { i, j = j', v = hout[i] } |
404 map do i: | 413 done (keys hout); |
405 { i, j = j', v = hout[i] } | 414 done (nonEmptySlices d)); |
406 done (keys hout); | |
407 fi | |
408 done [0..size.columns - 1]); | |
409 makeSparse (ColumnMajor ()) size (concat entries)); | 415 makeSparse (ColumnMajor ()) size (concat entries)); |
410 SparseCSR _: | 416 SparseCSR _: |
411 sparseProduct size m1 (flipped m2); | 417 sparseProduct size m1 (flipped m2); |
412 _: failWith "sparseProduct called for non-sparse matrices"; | 418 _: failWith "sparseProduct called for non-sparse matrices"; |
413 esac; | 419 esac; |