changeset 102:190ba28b64ab

Quicker sum and multiply for blocks
author Chris Cannam
date Fri, 22 Mar 2013 23:06:12 +0000
parents 2bc6534248fe
children 1ff7bc742ec5
files yetilab/block/blockfuncs.yeti
diffstat 1 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/yetilab/block/blockfuncs.yeti	Thu Mar 21 21:53:13 2013 +0000
+++ b/yetilab/block/blockfuncs.yeti	Fri Mar 22 23:06:12 2013 +0000
@@ -2,9 +2,15 @@
 module yetilab.block.blockfuncs;
 
 b = load yetilab.block.block;
+vec = load yetilab.block.fvector;
 
-sum' =
-    sum . b.list;
+sum' bl =
+   (v = b.data bl;
+    tot = new double[1];
+    for [0..length v - 1] do i:
+        tot[0] := tot[0] + v[i]
+    done;
+    tot[0]);
 
 mean bl =
     case b.length bl of
@@ -13,7 +19,14 @@
     esac;
 
 multiply b1 b2 =
-    b.fromList (map2 (*) (b.list b1) (b.list b2));
+   (v1 = b.data b1;
+    v2 = b.data b2;
+    len = if length v1 < length v2 then length v1 else length v2 fi;
+    bb = vec.zeros len;
+    for [0..len-1] do i:
+        bb[i] := v1[i] * v2[i]
+    done;
+    b.block bb);
 
 divideBy n bl =
     b.fromList (map (/ n) (b.list bl));