Mercurial > hg > may
changeset 441:f33f9dfb8422
Some Java for vector bits
author | Chris Cannam |
---|---|
date | Wed, 23 Oct 2013 08:10:03 +0100 |
parents | 76d41e53fad2 |
children | 1404b9b58868 |
files | build.xml src/may/bits/VectorBits.java src/may/vector/blockfuncs.yeti |
diffstat | 3 files changed, 64 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/build.xml Fri Oct 18 11:18:45 2013 +0100 +++ b/build.xml Wed Oct 23 08:10:03 2013 +0100 @@ -25,11 +25,22 @@ classpath="${basedir}/../yeti/yeti.jar:${extjars}" /> </target> - <target name="classes" depends="taskdef"> + <target name="prepare"> + <mkdir dir="${basedir}/classes"/> + </target> + + <target name="yeticlasses" depends="taskdef"> <yetic srcdir="${basedir}/src" destdir="${basedir}/classes" includes="**/*.yeti" excludes="**/test/*.yeti" preload="yeti/lang/std:yeti/lang/io"/> </target> + <target name="javaclasses"> + <javac srcdir="${basedir}/src" destdir="${basedir}/classes" + includes="**/*.java" includeantruntime="false"/> + </target> + + <target name="classes" depends="prepare,javaclasses,yeticlasses"/> + <target name="jar" depends="classes,taskdef"> <jar jarfile="${basedir}/may.jar"> <fileset dir="${basedir}/classes"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/may/bits/VectorBits.java Wed Oct 23 08:10:03 2013 +0100 @@ -0,0 +1,42 @@ + +package may.bits; + +public class VectorBits +{ + public static double sum(double[] v) { + double tot = 0.0; + int len = v.length; + for (int i = 0; i < len; ++i) { + tot += v[i]; + } + return tot; + } + + public static double[] multiply(double[] v1, double[] v2) { + int len = v1.length; + if (v2.length < len) { + len = v2.length; + } + double[] out = new double[len]; + for (int i = 0; i < len; ++i) { + out[i] = v1[i] * v2[i]; + } + return out; + } + + public static void addTo(double[] out, double[] in, int len) { + for (int i = 0; i < len; ++i) { + out[i] += in[i]; + } + } + + public static double[] scaled(double[] v, double factor) { + int len = v.length; + double[] out = new double[v.length]; + for (int i = 0; i < len; ++i) { + out[i] = v[i] * factor; + } + return out; + } +} +
--- a/src/may/vector/blockfuncs.yeti Fri Oct 18 11:18:45 2013 +0100 +++ b/src/may/vector/blockfuncs.yeti Wed Oct 23 08:10:03 2013 +0100 @@ -5,19 +5,15 @@ load may.vector.type; -//!!! "internal" vector function to retrieve data for read-only +import may.bits: VectorBits; + +// "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 dat - 1] do i: - tot[0] := tot[0] + dat[i] - done; - tot[0]); +sum' v = VectorBits#sum(raw v); max' v = (dat = raw v; @@ -73,10 +69,8 @@ (len = head (sort (map vec.length bb)); vv = map raw bb; out = new double[len]; - for [0..len-1] do i: - for vv do v: - out[i] := out[i] + v[i]; - done; + for vv do v: + VectorBits#addTo(out, v, len); done; vec.vector out); @@ -90,24 +84,16 @@ done; vec.vector out); -multiply 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 = VectorBits#multiply(raw b1, raw b2); scaled n v = if n == 1 then v - else vec.fromList (map (* n) (vec.list v)); + else VectorBits#scaled(raw v, n); fi; -divideBy n v = // Not just "scaled (1/n)" -- this way we get exact rationals +divideBy n v = if n == 1 then v - else vec.fromList (map (/ n) (vec.list v)); + else VectorBits#scaled(raw v, 1.0 / n); fi; sqr v =