Mercurial > hg > may
changeset 212:e5158af5e8be matrix_opaque_immutable
Update blockfuncs
author | Chris Cannam |
---|---|
date | Sat, 11 May 2013 11:19:48 +0100 |
parents | 8e79cf8a4399 |
children | d841bfc143dd |
files | Makefile yetilab/block/blockfuncs.yeti |
diffstat | 2 files changed, 41 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Fri May 10 22:48:55 2013 +0100 +++ b/Makefile Sat May 11 11:19:48 2013 +0100 @@ -10,7 +10,7 @@ jar cf $@ -C classes yetilab clean: - rm -rf com bin/.testrun + rm -rf com bin/.testrun classes distclean: clean rm -f yetilab.jar
--- a/yetilab/block/blockfuncs.yeti Fri May 10 22:48:55 2013 +0100 +++ b/yetilab/block/blockfuncs.yeti Sat May 11 11:19:48 2013 +0100 @@ -1,67 +1,72 @@ module yetilab.block.blockfuncs; -b = load yetilab.block.block; -vec = load yetilab.block.fvector; +vec = load yetilab.block.vector; -load yetilab.block.blocktype; +load yetilab.block.vectortype; -sum' bl = - (v = b.data bl; +//!!! "internal" vector function to retrieve data for read-only +// purposes without copying +raw = + (raw' v is ~double[] -> ~double[] = v; + raw' as vector -> ~double[]); + +sum' v = + (dat = raw v; tot = new double[1]; - for [0..length v - 1] do i: - tot[0] := tot[0] + v[i] + for [0..length dat - 1] do i: + tot[0] := tot[0] + dat[i] done; tot[0]); -mean bl = - case b.length bl of +mean v = + case vec.length v of 0: 0; - len: sum' bl / len + len: sum' v / len esac; multiply b1 b2 = - (v1 = b.data b1; - v2 = b.data b2; + (v1 = raw b1; + v2 = raw b2; len = if length v1 < length v2 then length v1 else length v2 fi; - bb = vec.zeros len; + out = new double[len]; for [0..len-1] do i: - bb[i] := v1[i] * v2[i] + out[i] := v1[i] * v2[i] done; - b.block bb); + vec.vector out); -divideBy n bl = - b.fromList (map (/ n) (b.list bl)); +divideBy n v = + vec.fromList (map (/ n) (vec.list v)); -sqr bl = - multiply bl bl; +sqr v = + multiply v v; rms = sqrt . mean . sqr; sqrt' = - b.fromList . (map sqrt) . b.list; + vec.fromList . (map sqrt) . vec.list; -fftshift bl = - (len = b.length bl; +fftshift v = + (len = vec.length v; half = int(len/2 + 0.5); // round up for odd-length sequences - b.concat [b.rangeOf half (len-half) bl, b.rangeOf 0 half bl]); + vec.concat [vec.rangeOf half (len-half) v, vec.rangeOf 0 half v]); -ifftshift bl = - (len = b.length bl; +ifftshift v = + (len = vec.length v; half = int(len/2); // round down for odd-length sequences - b.concat [b.rangeOf half (len-half) bl, b.rangeOf 0 half bl]); + vec.concat [vec.rangeOf half (len-half) v, vec.rangeOf 0 half v]); { -sum is block -> number = sum', -mean is block -> number, -multiply is block -> block -> block, -divideBy is number -> block -> block, -sqr is block -> block, -sqrt is block -> block = sqrt', -rms is block -> number, -fftshift is block -> block, -ifftshift is block -> block, +sum is vector -> number = sum', +mean is vector -> number, +multiply is vector -> vector -> vector, +divideBy is number -> vector -> vector, +sqr is vector -> vector, +sqrt is vector -> vector = sqrt', +rms is vector -> number, +fftshift is vector -> vector, +ifftshift is vector -> vector, }