> -- IA = [ 1 3 5 7 ]      //  IA(i) = Index of the first nonzero element of
> row i in A

Why 4th element if A has only 3 rows?

> 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.

You want it like this:

select a1.rowid, ifnull(sum(a2.ct), 0) + 1 as IA
from rowwiseB a1 left outer join rowwiseB a2 on a2.rowid < a1.rowid
group by a1.rowid;


Pavel

On Fri, Oct 16, 2009 at 2: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
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to