changeset 36:fa49869bda51

Add multiply, consts
author Chris Cannam
date Sat, 22 Dec 2012 11:19:46 +0000
parents 1f80673af4c7
children d239bdcdb541
files block.yeti blockfuncs.yeti fvector.yeti test/test_blockfuncs.yeti test/test_fvector.yeti
diffstat 5 files changed, 40 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/block.yeti	Sat Dec 22 10:08:06 2012 +0000
+++ b/block.yeti	Sat Dec 22 11:19:46 2012 +0000
@@ -3,7 +3,8 @@
 vec = load fvector;
 
 zeros = Block . vec.zeros;
-ones  = Block . vec.ones;
+consts m  = Block . (vec.consts m);
+ones = Block . vec.ones;
 
 block v is ~double[] -> (Block ~double[]) = 
     Block v;
@@ -33,7 +34,7 @@
     Block (vec.concat (map unblock blocks));
 
 {
-zeros, ones,
+zeros, consts, ones,
 block, unblock,
 fromList,
 length = length',
--- a/blockfuncs.yeti	Sat Dec 22 10:08:06 2012 +0000
+++ b/blockfuncs.yeti	Sat Dec 22 11:19:46 2012 +0000
@@ -2,6 +2,7 @@
 module blockfuncs;
 
 b = load block;
+vec = load fvector;
 
 sum' =
     sum . b.list;
@@ -12,8 +13,16 @@
         len: sum' bl / len
     esac;
 
-sqr =
-    b.fromList . (map do x: x*x done) . b.list;
+multiply b1 b2 =
+   (v1 = b.unblock b1;
+    v2 = b.unblock b2;
+    len = min (vec.length v1) (vec.length v2);
+    v = vec.zeros len;
+    for [0..len-1] do i: v[i] := v1[i] * v2[i] done;
+    b.block v);
+
+sqr b =
+    multiply b b;
 
 sqrt' =
     b.fromList . (map sqrt) . b.list;
@@ -24,7 +33,7 @@
 {
 sum = sum',
 mean,
-sqr,
+multiply, sqr,
 sqrt = sqrt',
 rms
 }
--- a/fvector.yeti	Sat Dec 22 10:08:06 2012 +0000
+++ b/fvector.yeti	Sat Dec 22 11:19:46 2012 +0000
@@ -5,13 +5,15 @@
 zeros n =
     new double[n];
 
-ones n =
+consts m n =
    (a = zeros n;
     for [0..n-1] do i:
-        a[i] := 1.0;
+        a[i] := m;
     done;
     a);
 
+ones = consts 1.0;
+
 vector l is list?<number> -> ~double[] =
    (arr = array(l);
     len = length arr;
@@ -51,7 +53,7 @@
     vout);
 
 {
-zeros, ones,
+zeros, consts, ones,
 vector,
 length = length',
 list = list',
--- a/test/test_blockfuncs.yeti	Sat Dec 22 10:08:06 2012 +0000
+++ b/test/test_blockfuncs.yeti	Sat Dec 22 11:19:46 2012 +0000
@@ -3,8 +3,8 @@
 
 stdSqrt = sqrt;
 
-{ zeros, ones, fromList, list } = load block;
-{ sum, mean, sqr, sqrt, rms } = load blockfuncs;
+{ zeros, consts, ones, fromList, list } = load block;
+{ sum, mean, multiply, sqr, sqrt, rms } = load blockfuncs;
 { declare, compare } = load test.test;
 
 declare [
@@ -23,6 +23,11 @@
         compare ((mean . fromList) [1,-2,3,0]) 0.5
 ),
 
+"multiply": \(
+    compare (list (multiply (zeros 0) (ones 5))) [] and
+        compare (list (multiply (consts (-3) 4) (fromList [1,2,3]))) [-3,-6,-9]
+),
+
 "sqr": \(
     compare ((list . sqr . zeros) 0) [] and
         compare ((list . sqr . ones) 5) [1,1,1,1,1] and
--- a/test/test_fvector.yeti	Sat Dec 22 10:08:06 2012 +0000
+++ b/test/test_fvector.yeti	Sat Dec 22 11:19:46 2012 +0000
@@ -19,6 +19,19 @@
         t.compare v[2] 0;
 ),
 
+"consts-empty": \(
+    v = vec.consts 4 0;
+    t.compare (vec.length v) 0;
+),
+
+"consts": \(
+    v = vec.consts 4 3;
+    t.compare (vec.length v) 3 and
+        t.compare v[0] 4 and
+        t.compare v[1] 4 and
+        t.compare v[2] 4;
+),
+
 "ones-empty": \(
     v = vec.ones 0;
     t.compare (vec.length v) 0;