Mercurial > hg > may
changeset 260:de770971a628
Rename and reorder args of at and slice functions in matrix and vector for consistency with std module equivalents
author | Chris Cannam |
---|---|
date | Wed, 22 May 2013 13:54:15 +0100 |
parents | fae62dca8048 |
children | 53ff481f1a41 |
files | yetilab/matrix/matrix.yeti yetilab/matrix/test/test_matrix.yeti yetilab/stream/channels.yeti yetilab/stream/filter.yeti yetilab/stream/framer.yeti yetilab/stream/syntheticstream.yeti yetilab/vamp/vamppost.yeti yetilab/vector/blockfuncs.yeti yetilab/vector/test/test_vector.yeti yetilab/vector/vector.yeti |
diffstat | 10 files changed, 56 insertions(+), 75 deletions(-) [+] |
line wrap: on
line diff
--- a/yetilab/matrix/matrix.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/matrix/matrix.yeti Wed May 22 13:54:15 2013 +0100 @@ -84,7 +84,7 @@ var v = 0; for [0..length slice.indices - 1] do i: if slice.indices[i] == m then - v := vec.at i slice.values; + v := vec.at slice.values i; fi done; v); @@ -93,14 +93,14 @@ (slice = sparseSlice n d; dslice = new double[d.extent]; for [0..length slice.indices - 1] do i: - dslice[slice.indices[i]] := vec.at i slice.values; + dslice[slice.indices[i]] := vec.at slice.values i; done; vec.vector dslice); -getAt row col m = +at' m row col = case m of - DenseRows rows: r = rows[row]; vec.at col r; - DenseCols cols: c = cols[col]; vec.at row c; + DenseRows rows: r = rows[row]; vec.at r col; + DenseCols cols: c = cols[col]; vec.at c row; SparseCSR data: fromSlice row col data; SparseCSC data: fromSlice col row data; esac; @@ -109,14 +109,14 @@ case m of DenseCols cols: cols[j]; SparseCSC data: filledSlice j data; - _: vec.fromList (map do i: getAt i j m done [0..height m - 1]); + _: vec.fromList (map do i: at' m i j done [0..height m - 1]); esac; getRow i m = case m of DenseRows rows: rows[i]; SparseCSR data: filledSlice i data; - _: vec.fromList (map do j: getAt i j m done [0..width m - 1]); + _: vec.fromList (map do j: at' m i j done [0..width m - 1]); esac; asRows m = @@ -282,10 +282,10 @@ fi else if isRowMajor? m then - generate do row col: getAt row col m done (size m); + generate do row col: at' m row col done (size m); else transposed - (generate do row col: getAt col row m done + (generate do row col: at' m col row done { rows = (width m), columns = (height m) }); fi fi; @@ -448,7 +448,7 @@ for [0..size.columns - 1] do j': c = getColumn j' m2; for e do { v, i, j }: - data[j'][i] := data[j'][i] + v * (vec.at j c); + data[j'][i] := data[j'][i] + v * (vec.at c j); done; done; DenseCols (array (map vec.vector (list data)))); @@ -459,7 +459,7 @@ for [0..size.rows - 1] do i': r = getRow i' m1; for e do { v, i, j }: - data[i'][j] := data[i'][j] + v * (vec.at i r); + data[i'][j] := data[i'][j] + v * (vec.at r i); done; done; DenseRows (array (map vec.vector (list data)))); @@ -472,7 +472,7 @@ (map do j': cs = sparseSlice j' d; hin = mapIntoHash - (at cs.indices) ((flip vec.at) cs.values) + (at cs.indices) (vec.at cs.values) [0..length cs.indices - 1]; hout = [:]; for e do { v, i, j }: @@ -563,7 +563,6 @@ fi); concat direction mm = //!!! doc: storage order is taken from first matrix in sequence - //!!! would this be better as separate concatHorizontal/concatVertical functions? case length mm of 0: zeroSizeMatrix (); 1: head mm; @@ -591,21 +590,23 @@ fi; esac; -//!!! inconsistent with std.slice which has start..end not start+count (see also vec.slice/rangeOf) -rowSlice start count m = //!!! doc: storage order same as input +//!!! doc note: argument order chosen for consistency with std module slice +rowSlice m start end = //!!! doc: storage order same as input if isRowMajor? m then - DenseRows (array (map ((flip getRow) m) [start .. start + count - 1])) + DenseRows (array (map ((flip getRow) m) [start .. end - 1])) else - DenseCols (array (map (vec.rangeOf start count) (asColumns m))) + DenseCols (array (map do v: vec.slice v start end done (asColumns m))) fi; -columnSlice start count m = //!!! doc: storage order same as input +//!!! doc note: argument order chosen for consistency with std module slice +columnSlice m start end = //!!! doc: storage order same as input if not isRowMajor? m then - DenseCols (array (map ((flip getColumn) m) [start .. start + count - 1])) + DenseCols (array (map ((flip getColumn) m) [start .. end - 1])) else - DenseRows (array (map (vec.rangeOf start count) (asRows m))) + DenseRows (array (map do v: vec.slice v start end done (asRows m))) fi; +//!!! needs sparse version resizedTo newsize m = (if newsize == (size m) then m @@ -617,13 +618,13 @@ rowm = isRowMajor? m; resizedTo newsize if rowm and growrows < 0 then - rowSlice 0 newsize.rows m + rowSlice m 0 newsize.rows elif (not rowm) and growcols < 0 then - columnSlice 0 newsize.columns m + columnSlice m 0 newsize.columns elif growrows < 0 then - rowSlice 0 newsize.rows m + rowSlice m 0 newsize.rows elif growcols < 0 then - columnSlice 0 newsize.columns m + columnSlice m 0 newsize.columns else if growrows > 0 then concat (Vertical ()) @@ -641,7 +642,7 @@ height, density, nonZeroValues, - getAt, + at = at', getColumn, getRow, isRowMajor?, @@ -687,7 +688,7 @@ height is matrix -> number, density is matrix -> number, nonZeroValues is matrix -> number, - getAt is number -> number -> matrix -> number, + at is matrix -> number -> number -> number, getColumn is number -> matrix -> vector, getRow is number -> matrix -> vector, isRowMajor? is matrix -> boolean, @@ -717,8 +718,8 @@ filter is (number -> boolean) -> matrix -> matrix, product is matrix -> matrix -> matrix, concat is (Horizontal () | Vertical ()) -> list<matrix> -> matrix, - rowSlice is number -> number -> matrix -> matrix, - columnSlice is number -> number -> matrix -> matrix, + rowSlice is matrix -> number -> number -> matrix, + columnSlice is matrix -> number -> number -> matrix, newMatrix is (ColumnMajor () | RowMajor ()) -> list<vector> -> matrix, newRowVector is vector -> matrix, newColumnVector is vector -> matrix,
--- a/yetilab/matrix/test/test_matrix.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/matrix/test/test_matrix.yeti Wed May 22 13:54:15 2013 +0100 @@ -115,12 +115,12 @@ not mat.equalUnder do a b: a % 2 == b % 2 done p t ), -"getAt-\(name)": \( +"at-\(name)": \( generator row col = row * 10 + col; m = generate generator { rows = 2, columns = 3 }; all id (map do row: all id - (map do col: mat.getAt row col m == generator row col done [0..2]) + (map do col: mat.at m row col == generator row col done [0..2]) done [0..1]) ), @@ -140,8 +140,8 @@ m' = mat.transposed m; all id (map do row: all id - // like getAt test, but with col/row flipped - (map do col: mat.getAt col row m' == generator row col done [0..2]) + // like at test, but with col/row flipped + (map do col: mat.at m' col row == generator row col done [0..2]) done [0..1]) ), @@ -432,13 +432,13 @@ "rowSlice-\(name)": \( compareMatrices - (mat.rowSlice 1 2 (newMatrix (RowMajor ()) [[1,0],[3,4],[0,6],[7,8]])) + (mat.rowSlice (newMatrix (RowMajor ()) [[1,0],[3,4],[0,6],[7,8]]) 1 3) (newMatrix (RowMajor ()) [[3,4],[0,6]]) ), "columnSlice-\(name)": \( compareMatrices - (mat.columnSlice 1 2 (newMatrix (RowMajor ()) [[1,0,3,4],[0,6,7,8]])) + (mat.columnSlice (newMatrix (RowMajor ()) [[1,0,3,4],[0,6,7,8]]) 1 3) (newMatrix (RowMajor ()) [[0,3],[6,7]]) ),
--- a/yetilab/stream/channels.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/stream/channels.yeti Wed May 22 13:54:15 2013 +0100 @@ -21,7 +21,7 @@ v = new double[columns * rows]; for [0..rows-1] do row: for [0..columns-1] do col: - v[col * rows + row] := mat.getAt row col m; + v[col * rows + row] := mat.at m row col; done; done; vec.vector v; @@ -47,7 +47,7 @@ v = new double[columns]; for [0..rows-1] do row: for [0..columns-1] do col: - v[col] := v[col] + mat.getAt row col m; + v[col] := v[col] + mat.at m row col; done; done; vec.vector v);
--- a/yetilab/stream/filter.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/stream/filter.yeti Wed May 22 13:54:15 2013 +0100 @@ -164,10 +164,10 @@ avail = (mat.width cache) - start; if avail >= count then pos := pos + count; - [mat.columnSlice start count cache] + [mat.columnSlice cache start (start + count)] else pos := pos + avail; - mat.columnSlice start avail cache :: + mat.columnSlice cache start (start + avail) :: cachedPartsFor (count - avail); fi); readFromCache count =
--- a/yetilab/stream/framer.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/stream/framer.yeti Wed May 22 13:54:15 2013 +0100 @@ -34,7 +34,7 @@ buffer = map2 do buf row: vec.concat - [vec.rangeOf hop (size-hop) buf, + [vec.slice buf hop size, vec.resizedTo hop (mat.getRow row m)]; done buffer [0..stream.channels-1];
--- a/yetilab/stream/syntheticstream.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/stream/syntheticstream.yeti Wed May 22 13:54:15 2013 +0100 @@ -46,7 +46,7 @@ get finished? () = not (n > position), read count = ch.deinterleaved 1 (rc = min count (n - position); - result = vec.rangeOf position rc data; + result = vec.slice data position (position + rc); position := position + rc; result), close = \(),
--- a/yetilab/vamp/vamppost.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/vamp/vamppost.yeti Wed May 22 13:54:15 2013 +0100 @@ -76,14 +76,14 @@ { start = t0, step = t1 - t0, - values = map do f: vec.at 0 f.values done features; + values = map do f: vec.at f.values 0 done features; } fi; structureCurve features = map do f: { time = timeOf f, - value = vec.at 0 f.values, + value = vec.at f.values 0, label = f.label } done features; @@ -96,7 +96,7 @@ structureSegmentation features = map do f: { time = timeOf f, - type = vec.at 0 f.values, + type = vec.at f.values 0, label = f.label } done features; @@ -104,7 +104,7 @@ map do f: { time = timeOf f, duration = f.duration, - pitch = vec.at 0 f.values, //!!! no, might be empty + pitch = vec.at f.values 0, //!!! no, might be empty otherValues = array (tail (vec.list f.values)), //!!! no, might be empty label = f.label } done features;
--- a/yetilab/vector/blockfuncs.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/vector/blockfuncs.yeti Wed May 22 13:54:15 2013 +0100 @@ -96,12 +96,12 @@ fftshift v = (len = vec.length v; half = int(len/2 + 0.5); // round up for odd-length sequences - vec.concat [vec.rangeOf half (len-half) v, vec.rangeOf 0 half v]); + vec.concat [vec.slice v half len, vec.slice v 0 half]); ifftshift v = (len = vec.length v; half = int(len/2); // round down for odd-length sequences - vec.concat [vec.rangeOf half (len-half) v, vec.rangeOf 0 half v]); + vec.concat [vec.slice v half len, vec.slice v 0 half]); { sum is vector -> number = sum',
--- a/yetilab/vector/test/test_vector.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/vector/test/test_vector.yeti Wed May 22 13:54:15 2013 +0100 @@ -75,24 +75,11 @@ w'' = vec.ones 3; vec.equal v w and not vec.equal v w' and not vec.equal v w''; ), -/* -"copyOf-empty": \( - vec.equal (vec.fromList []) (vec.copyOf (vec.fromList [])) -), -"copyOf": \( +"slice": \( v = vec.fromList [1,2,3,4]; - w = vec.copyOf v; - vec.equal v w and ( - v[0] := 0; // check result is not aliasing inputs - not vec.equal v w - ); -), -*/ -"rangeOf": \( - v = vec.fromList [1,2,3,4]; - vec.equal (vec.rangeOf 0 4 v) v and ( - vec.equal (vec.rangeOf 2 2 v) (vec.fromList [3,4]) + vec.equal (vec.slice v 0 4) v and ( + vec.equal (vec.slice v 2 4) (vec.fromList [3,4]) ) ), @@ -109,9 +96,6 @@ x = vec.concat [v, w]; x' = vec.fromList [1,2,3,4,5,6]; vec.equal x x' and -/* (v[0] := 0; // check result is not aliasing inputs - w[0] := 0; - vec.equal x x') and */ vec.equal x' (vec.concat [x', vec.fromList []]) and vec.equal x' (vec.concat [vec.fromList [], x']) ),
--- a/yetilab/vector/vector.yeti Wed May 22 09:22:10 2013 +0100 +++ b/yetilab/vector/vector.yeti Wed May 22 13:54:15 2013 +0100 @@ -40,8 +40,8 @@ empty?' = empty? . list'; -//!!! this is reversed from std.at, fix -at' n v is number -> ~double[] -> number = +//!!! doc note: argument order chosen for consistency with std module function +at' v n is ~double[] -> number -> number = v[n]; floats a is ~double[] -> ~float[] = @@ -70,11 +70,9 @@ copyOf v is ~double[] -> ~double[] = Arrays#copyOf(v, list' v |> length); -rangeOf start len v is number -> number -> ~double[] -> ~double[] = - Arrays#copyOfRange(v, start, start + len); - +//!!! doc note: argument order chosen for consistency with std module function slice v start end is ~double[] -> number -> number -> ~double[] = - rangeOf start (end - start) v; + Arrays#copyOfRange(v, start, end); resizedTo n v is number -> ~double[] -> ~double[] = Arrays#copyOf(v, n); @@ -106,7 +104,6 @@ at = at', equal, equalUnder, - rangeOf, slice, resizedTo, concat, @@ -123,11 +120,10 @@ array is vector -> array<number>, length is vector -> number, empty? is vector -> boolean, - at is number -> vector -> number, + at is vector -> number -> number, equal is vector -> vector -> boolean, equalUnder is (number -> number -> boolean) -> vector -> vector -> boolean, - rangeOf is number -> number -> vector -> vector, //!!! not well-named now vector arg is at the end - slice is vector -> number -> number -> vector, //!!! duplication with rangeOf (std module function on arrays is called slice though) + slice is vector -> number -> number -> vector, resizedTo is number -> vector -> vector, concat is list?<vector> -> vector, }