# HG changeset patch # User Chris Cannam # Date 1367440923 -3600 # Node ID 3fbaa25aad89efe632f84b59a99104386742af73 # Parent 073641eba8797ceeffe9c4d7ec80bb430e27ba57 Make newMatrix/newRowVector/newColumnVector take block rather than list args. Makes some uses simpler, some more complex, but most faster (sometimes by a lot). diff -r 073641eba879 -r 3fbaa25aad89 yetilab/block/block.yeti --- a/yetilab/block/block.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/block/block.yeti Wed May 01 21:42:03 2013 +0100 @@ -17,6 +17,7 @@ fromList l = vec.vector l, list = vec.list, length = vec.length, + empty? = vec.empty?, equal = vec.equal, copyOf = vec.copyOf, rangeOf = vec.rangeOf, @@ -34,6 +35,7 @@ fromList is list? -> block, list is block -> list, length is block -> number, + empty? is block -> boolean, equal is block -> block -> boolean, copyOf is block -> block, rangeOf is block -> number -> number -> block, diff -r 073641eba879 -r 3fbaa25aad89 yetilab/block/fvector.yeti --- a/yetilab/block/fvector.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/block/fvector.yeti Wed May 01 21:42:03 2013 +0100 @@ -29,6 +29,9 @@ length' = length . list'; +empty?' = + empty? . list'; + floats a is ~double[] -> ~float[] = (len = length' a; f = new float[len]; @@ -72,6 +75,7 @@ zeros, consts, ones, vector, length = length', +empty? = empty?', list = list', floats, fromFloats, equal, diff -r 073641eba879 -r 3fbaa25aad89 yetilab/matrix/matrix.yeti --- a/yetilab/matrix/matrix.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/matrix/matrix.yeti Wed May 01 21:42:03 2013 +0100 @@ -125,18 +125,18 @@ ColM d: ColM (copyOfData d); esac)); -newMatrix type data is RowMajor () | ColumnMajor () -> list?> -> 'a = +newMatrix type data = //!!! NB does not copy data (tagger = case type of RowMajor (): RowM; ColumnMajor (): ColM esac; - if empty? data or empty? (head data) + if empty? data or block.empty? (head data) then zeroMatrix { rows = 0, columns = 0 } - else make (tagger (array (map vec.vector data))) + else make (tagger (array (map block.data data))) fi); -newRowVector data = - newMatrix (RowMajor ()) [data]; +newRowVector data = //!!! NB does not copy data + make (RowM (array [block.data data])); -newColumnVector data = - newMatrix (ColumnMajor ()) [data]; +newColumnVector data = //!!! NB does not copy data + make (ColM (array [block.data data])); scaled factor m = generate do row col: factor * m.getAt row col done m.size; diff -r 073641eba879 -r 3fbaa25aad89 yetilab/matrix/test/test_matrix.yeti --- a/yetilab/matrix/test/test_matrix.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/matrix/test/test_matrix.yeti Wed May 01 21:42:03 2013 +0100 @@ -16,7 +16,7 @@ randomMatrix s = flipper (mat.randomMatrix s); identityMatrix s = flipper (mat.identityMatrix s); generate f s = flipper (mat.generate f s); - newMatrix t d = flipper (mat.newMatrix t d); + newMatrix t d = flipper (mat.newMatrix t (map block.fromList d)); [ "constMatrixEmpty-\(name)": \( diff -r 073641eba879 -r 3fbaa25aad89 yetilab/stream/channels.yeti --- a/yetilab/stream/channels.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/stream/channels.yeti Wed May 01 21:42:03 2013 +0100 @@ -15,11 +15,20 @@ done; block.block v); -deinterleaved channels b = //!!! should generate a RowMajor matrix for faster framing - (v = block.data b; - mat.generate do row col: - v[channels * col + row] - done { rows = channels, columns = ((vec.length v) / channels) }); +deinterleaved channels b = + if channels == 1 then + mat.newRowVector b + else + rows = (block.length b) / channels; + vv = array (map \(vec.zeros rows) [0..channels-1]); + v = block.data b; + for [0..rows-1] do row: + for [0..channels-1] do col: + vv[col][row] := v[channels * row + col]; + done + done; + mat.newMatrix (RowMajor ()) (map block.block vv); + fi; mixedDown m = ({ columns, rows } = m.size; diff -r 073641eba879 -r 3fbaa25aad89 yetilab/stream/filter.yeti --- a/yetilab/stream/filter.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/stream/filter.yeti Wed May 01 21:42:03 2013 +0100 @@ -25,8 +25,8 @@ { truncatedTo, -} as { - truncatedTo is number -> stream -> stream +//!!!} as { +// truncatedTo is number -> stream -> stream } diff -r 073641eba879 -r 3fbaa25aad89 yetilab/stream/framer.yeti --- a/yetilab/stream/framer.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/stream/framer.yeti Wed May 01 21:42:03 2013 +0100 @@ -45,7 +45,7 @@ stream.close (); []; else - mat.newMatrix (RowMajor ()) (map block.list buffer) + mat.newMatrix (RowMajor ()) buffer :. \(overlappingBlockList size hop stream remaining buffer); fi); diff -r 073641eba879 -r 3fbaa25aad89 yetilab/stream/test/test_framer.yeti --- a/yetilab/stream/test/test_framer.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/stream/test/test_framer.yeti Wed May 01 21:42:03 2013 +0100 @@ -9,7 +9,7 @@ compareFrames frames1 frames2 = all id (map2 do f1 f2: compareUsing mat.equal f1 f2 done frames1 - (map mat.newRowVector frames2)); + (map (mat.newRowVector . block.fromList) frames2)); [ diff -r 073641eba879 -r 3fbaa25aad89 yetilab/vamp/test/test_vamp.yeti --- a/yetilab/vamp/test/test_vamp.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/vamp/test/test_vamp.yeti Wed May 01 21:42:03 2013 +0100 @@ -4,6 +4,7 @@ synthetic = load yetilab.stream.syntheticstream; filter = load yetilab.stream.filter; mat = load yetilab.matrix.matrix; +block = load yetilab.block.block; { compare, compareUsing } = load yetilab.test.test; @@ -91,7 +92,7 @@ compareUsing mat.equal g (mat.newMatrix (ColumnMajor ()) (map do x: - floats (map do y: + (block.fromList . floats) (map do y: (x + y + 2) / 30 done [0..9]) done [0..19])); @@ -105,7 +106,7 @@ compareUsing mat.equal g (mat.newMatrix (ColumnMajor ()) (map do x: - floats (map do y: + (block.fromList . floats) (map do y: (x + y + 2) / 20 done [0..9]) done [0..19])); diff -r 073641eba879 -r 3fbaa25aad89 yetilab/vamp/vamppost.yeti --- a/yetilab/vamp/vamppost.yeti Wed May 01 16:20:07 2013 +0100 +++ b/yetilab/vamp/vamppost.yeti Wed May 01 21:42:03 2013 +0100 @@ -58,8 +58,7 @@ if empty? features then mat.zeroMatrix { rows = binCount, columns = 0 }; else - mat.newMatrix (ColumnMajor ()) - (map do f: list (bl.data f.values) done features); + mat.newMatrix (ColumnMajor ()) (map (.values) features); fi; timeOf f =