yes, that's what I am thinking of too. This big table is in charge of store all matrix, keep track of all index changes, and rollback when needed. I will only extract a tiny part from this big table in format like a sparse matrix, and put it in C array, then the available numerical routines, such as matrix inversion, can be applied to the C array. So this big table for all matrix is a information manager or a data warehouse in my thinking. I am not sure how easy it will be to use this big table as a central warehouse for now.
On Fri, Oct 16, 2009 at 3:50 PM, Stephan Wehner <stephanweh...@gmail.com>wrote: > On Fri, Oct 16, 2009 at 1:41 PM, Michael Chen > <vancouver.mich...@gmail.com> wrote: > > rdbms is indeed not a place for store a single sparse matrix like this. > > However I have hundreds of them, and I need to break them and recombine > them > > frequently; furthermore, I need to drop a few rows or columns > successively, > > and need to be able to trace back what's a row's original index. I think > > sqlite in my C/C++ code will save lots of boring reindexing coding, and > it > > is more robust. > > Would you not store all the matrices in one table, and use a > "matrix_id" column to identify which records are for one matrix ? > > Stephan > > > > > On Fri, Oct 16, 2009 at 1:14 PM, P Kishor <punk.k...@gmail.com> wrote: > > > >> 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 > >> > > > > > > > > -- > > 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 > > > > > > -- > Stephan Wehner > > -> http://stephan.sugarmotor.org (blog and homepage) > -> http://loggingit.com > -> http://www.thrackle.org > -> http://www.buckmaster.ca > -> http://www.trafficlife.com > -> http://stephansmap.org -- http://blog.stephansmap.org > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > -- 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