diff yetilab/matrix/matrix.yeti @ 163:3fbaa25aad89

Make newMatrix/newRowVector/newColumnVector take block rather than list<number> args. Makes some uses simpler, some more complex, but most faster (sometimes by a lot).
author Chris Cannam
date Wed, 01 May 2013 21:42:03 +0100
parents 38938ca5db0c
children df2383f6b99b
line wrap: on
line diff
--- 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?<list?<number>> -> '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;