[SciPy-dev] conversion among sparse formats

Nathan Bell wnbell at gmail.com
Fri Dec 7 22:24:01 EST 2007


I've added a small benchmark to the scipy.sparse unittests (enabled with
level 5) that compares the cost of converting among the various sparse
formats.  The matrix is 900x900 with approximately 5 nonzeros per row
(5-point finite difference stencil).  Using the latest SVN, you can produce
the table below with the following command:
 python -c 'from scipy.sparse import test; test(5)'

                     Sparse Matrix Conversion
====================================================================
format |  tocsr()  |  tocsc()  |  tocoo()  |  tolil()  |  todok()
--------------------------------------------------------------------
 csr   |  0.000002 |  0.000292 |  0.000356 |  3.460000 |    n/a
 csc   |  0.000312 |  0.000002 |  0.000358 |  3.450000 |    n/a
 coo   |  0.000389 |  0.000361 |  0.000002 |  3.460000 |    n/a
 lil   |  0.024000 |  0.024000 |  0.022000 |  3.540000 |    n/a
 dok   |  0.027500 |  0.060000 |  0.025000 |  3.510000 |    n/a


The numbers are the time (in seconds) to convert a matrix in format on the
left to each of the formats using the to___() methods.

Some observations:
1) None of the formats supports todok().  Does anyone want/need this?

2) Something is definitely wrong with tolil() since the reverse conversions
(e.g. lil_matrix.tocsr()) are 100x faster.

3) Conversion among CSR/CSC/COO is relatively cheap, so it should be
leveraged when going between the 'slow' but flexible formats (lil and dok)
and the 'fast' but inflexible formats (csr/csc/coo).  Specifically, when
converting any 'fast' format to a 'slow' format, you should first convert to
the most convenient 'fast' format.  Conversely, when converting from a
'slow' to a 'fast' format, using another 'fast' format as an intermediate
incurs no noticable overhead.

4) lil_matrix and dok_matrix are the only construction-oriented formats we
have, so it's important that they be reasonably quick.

-- 
Nathan Bell wnbell at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20071207/d658964b/attachment.html>


More information about the SciPy-Dev mailing list