[SciPy-user] Sparse: Efficient metod to convert to CSC format

Robert Cimrman cimrman3 at ntc.zcu.cz
Mon Oct 2 08:13:05 CDT 2006


William Hunter wrote:
> I've been bugging Robert C. and Ed S. (thanks guys) for a while about
> this now, but I think it might be good if I share my experiences with
> other users.
> 
> When converting a sparse matrix to CSC format, one of the quickest
> ways to get there is to give <sparse.csc_matrix> three vectors
> containing;
> 
> (1) [values]: the values,
> (2) [rowind]: the row indices and
> (3) [colptr]: the column pointer.
> 
> If one times how long it takes to get your CSC matrix by doing
> sparse.csc_matrix((values, rowind, colptr)) compared to the other ways
> to get it, e.g., csc_matrix(dense_mtx), I've found that the first
> method is faster (enough to be significant for me).
> 
> One can solve a sparse system with <linsolve.spsolve>, if your matrix
> is in CSC format. And here's my question: Let's say I have a way (and
> I might :-)) to construct those 3 vectors very quickly, how can I use
> them directly as arguments in <linsolve.spsolve>? For example:
> 
> solution = linsolve.spsolve([values],[rowind],[colptr],[RHS])

If you have already (values, rowind, colptr) triplet, creating a CSC 
matrix is virtually a no-operation (besides some sanity checks).

Is it really so inconvenient to write:
solution = linsolve.spsolve( csc_matrix( (values, rowind, colptr), shape 
),[RHS])?

On the other hand, the syntax
solution = linsolve.spsolve( (values,rowind,colptr,'csc'), [RHS])
might be useful as a syntactic sugar, so I am not against adding it. 
Note however, that you must indicate somehow if your triplet is CSR or 
CSC or ... - it is not much shorter then writing the full CSC constructor.

r.


More information about the SciPy-user mailing list