Mercurial > hg > may
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;