This is not the answer you are looking for, and there are SQL geniuses
on this list who will help you better, but really, is an rdbms really
a good place to store a matrix the way you are trying to do? So
convoluted.

My approach, if I really was determined to store it in sqlite, would
be to flatten the matrix in my code, and then stuff that into a table.
Retrieve it and deserialize it as needed. For example, Perl's freeze,
thaw are tailor made for this kind of stuff.


On Fri, Oct 16, 2009 at 1:09 PM, Michael Chen
<vancouver.mich...@gmail.com> wrote:
> --this is my first version for the purpose of storing sparse numerical
> matrix in sql
> --please let me know how to fix the bug at the end of the file, and how to
> tune the performance
> --or any better reference, thanks!
>
> .explain                                -- return result in more readable
> format
> .echo on                                -- echo the sql stmnt
>
> --I plan to store my sparse matrix (3 x 4) in table like this:
> -- [ 1 2 0 0 ]
> -- [ 0 3 9 0 ]
> -- [ 0 1 4 0 ]
> --
> -- is a three-by-four matrix with six nonzero elements, so
> --
> -- A  = [ 1 2 3 9 1 4 ] // List of non-zero matrix element in order
> -- IA = [ 1 3 5 7 ]      //  IA(i) = Index of the first nonzero element of
> row i in A
> -- JA = [ 1 2 2 3 2 3 ] // JA(i) = Column position of the non zero element
> A(i)
> --
> -- Note: In this example, the row and line index begin by 1 and not 0.
>
>  create table rowids(
>  rows integer primary key  -- there should be an easy way for a sequence
> 1..M?
>  );
>
> insert into rowids values (1);
> insert into rowids values (2);
> insert into rowids values (3);
>
> create table colids(
> cols integer primary key   -- there should be an easy way for a sequence
> 1..N?
> );
>
> insert into colids values (1);
> insert into colids values (2);
> insert into colids values (3);
> insert into colids values (4);
>
>
> create table matrix(
> rowid integer reference rowids,
> colid integer reference colids,
> value real non null
> );
>
> insert into matrix values (1,1,1);
> insert into matrix values (1,2,2);
> insert into matrix values (2,2,3);
> insert into matrix values (2,3,9);
> insert into matrix values (3,2,1);
> insert into matrix values (3,3,4);
> insert into matrix values (2,4,0); --this entry is inserted on purpose
>
>
> select * from matrix;
>
>
> --A rowwise  sparse matrix is then:
>
> create temp view rowwiseA as
> select  value as A, colid as JA from matrix
> where value != 0
> order by rowid, colid
> ;
>
> create temp view rowwiseB as
> select rowid, count(rowid) as ct
> from matrix
> where value != 0
> group by rowid
> order by rowid
> ;
>
> create temp view rowwiseC as
> select a1.rowid, sum(a2.ct) +1 as JA
> from rowwiseB a1, rowwiseB a2
> where a2.rowid < a1.rowid
> group by a1.rowid
> ;
> --this is not quite right yet, the first entry and last entry of JA vector
> is not here.
>
> select * from rowwiseA;
> select * from rowwiseB;
> select * from rowwiseC;
>
>
> create temp view rowwiseB as
> select count(rowid) as ia from matrix
> where value != 0
> group by rowid
> order by rowid
> ;
>
>
>
> --Best regards,
> --Michael Chen
> --Google Voice Phone.: 847-448-0647
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
Puneet Kishor http://www.punkish.org
Carbon Model http://carbonmodel.org
Charter Member, Open Source Geospatial Foundation http://www.osgeo.org
Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor
Nelson Institute, UW-Madison http://www.nelson.wisc.edu
-----------------------------------------------------------------------
Assertions are politics; backing up assertions with evidence is science
=======================================================================
Sent from Madison, WI, United States
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to