changeset 256:97e97a2e6a4e

Implement add, subtract, scaled, abs
author Chris Cannam
date Tue, 21 May 2013 22:36:39 +0100
parents 8043f7405eae
children f00ab8baa6d7
files yetilab/vector/blockfuncs.yeti yetilab/vector/test/test_blockfuncs.yeti
diffstat 2 files changed, 53 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/yetilab/vector/blockfuncs.yeti	Tue May 21 21:58:34 2013 +0100
+++ b/yetilab/vector/blockfuncs.yeti	Tue May 21 22:36:39 2013 +0100
@@ -45,6 +45,26 @@
         len: sum' v / len
     esac;
 
+add b1 b2 =
+   (v1 = raw b1;
+    v2 = raw b2;
+    len = if length v1 < length v2 then length v1 else length v2 fi;
+    out = new double[len];
+    for [0..len-1] do i:
+        out[i] := v1[i] + v2[i]
+    done;
+    vec.vector out);
+
+subtract b1 b2 =
+   (v1 = raw b1;
+    v2 = raw b2;
+    len = if length v1 < length v2 then length v1 else length v2 fi;
+    out = new double[len];
+    for [0..len-1] do i:
+        out[i] := v1[i] - v2[i]
+    done;
+    vec.vector out);
+
 multiply b1 b2 =
    (v1 = raw b1;
     v2 = raw b2;
@@ -58,12 +78,18 @@
 divideBy n v =
     vec.fromList (map (/ n) (vec.list v));
 
+scaled n v =
+    vec.fromList (map (* n) (vec.list v));
+
 sqr v =
     multiply v v;
 
 rms =
     sqrt . mean . sqr;
 
+abs' =
+    vec.fromList . (map abs) . vec.list;
+
 sqrt' =
     vec.fromList . (map sqrt) . vec.list;
 
@@ -80,8 +106,12 @@
 {
 sum is vector -> number = sum',
 mean is vector -> number,
+add is vector -> vector -> vector,
+subtract is vector -> vector -> vector,
 multiply is vector -> vector -> vector, 
 divideBy is number -> vector -> vector, 
+scaled is number -> vector -> vector,
+abs is vector -> vector = abs',
 sqr is vector -> vector,
 sqrt is vector -> vector = sqrt',
 rms is vector -> number,
--- a/yetilab/vector/test/test_blockfuncs.yeti	Tue May 21 21:58:34 2013 +0100
+++ b/yetilab/vector/test/test_blockfuncs.yeti	Tue May 21 22:36:39 2013 +0100
@@ -4,7 +4,7 @@
 stdSqrt = sqrt;
 
 { zeros, consts, ones, fromList, list } = load yetilab.vector.vector;
-{ sum, max, min, mean, multiply, divideBy, sqr, sqrt, rms, fftshift, ifftshift } = load yetilab.vector.blockfuncs;
+{ sum, max, min, mean, add, subtract, multiply, divideBy, scaled, abs, sqr, sqrt, rms, fftshift, ifftshift } = load yetilab.vector.blockfuncs;
 { compare } = load yetilab.test.test;
 
 [
@@ -37,6 +37,18 @@
         compare ((mean . fromList) [1,-2,3,0]) 0.5
 ),
 
+"add": \(
+    compare (list (add (zeros 0) (ones 5))) [] and
+        compare (list (add (consts 3 4) (fromList [1,2,3]))) [4,5,6] and
+        compare (list (add (consts (-3) 4) (fromList [1,2,3]))) [-2,-1,0] 
+),
+
+"subtract": \(
+    compare (list (subtract (zeros 0) (ones 5))) [] and
+        compare (list (subtract (consts 3 4) (fromList [1,2,3]))) [2,1,0] and
+        compare (list (subtract (consts (-3) 4) (fromList [1,2,3]))) [-4,-5,-6]
+),
+
 "multiply": \(
     compare (list (multiply (zeros 0) (ones 5))) [] and
         compare (list (multiply (consts (-3) 4) (fromList [1,2,3]))) [-3,-6,-9]
@@ -47,6 +59,16 @@
         compare (list (divideBy 5 (fromList [1,2,-3]))) [0.2,0.4,-0.6]
 ),
 
+"scaled": \(
+    compare (list (scaled 5 (ones 0))) [] and
+        compare (list (scaled 5 (fromList [1,2,-3]))) [5,10,-15]
+),
+
+"abs": \(
+    compare (list (abs (ones 0))) [] and
+        compare (list (abs (fromList [1,2,-3]))) [1,2,3]
+),
+
 "sqr": \(
     compare ((list . sqr . zeros) 0) [] and
         compare ((list . sqr . ones) 5) [1,1,1,1,1] and