[SciPy-user] Iteration over scipy.sparse matrices?

Nathan Bell wnbell at gmail.com
Thu May 1 17:40:05 EDT 2008


On Thu, May 1, 2008 at 4:32 PM, Nathan Bell <wnbell at gmail.com> wrote:
>  for i,j,v in zip(A.row, A.col, A.data):
>     print "row = %d, column = %d, value = %s" % (i,j,v)

I should mention that since A.row, A.col, and A.data are all numpy
arrays you can often vectorize sparse computations with them.

For instance, suppose we wanted to eliminate all entries of a
coo_matrix A that are less than 5 and store the result in a matrix B:

A = coo_matrix(....)
mask = A.data < 5
B = coo_matrix( (data[mask],(row[mask],col[mask])), shape=A.shape)

As another example, extract all the entries above the diagonal:

A = coo_matrix(....)
mask = A.col > A.row
B = coo_matrix( (data[mask],(row[mask],col[mask])), shape=A.shape)

Since conversions to and from the COO format are quite fast, you can
use this approach to efficiently implement lots computations on sparse
matrices.


-- 
Nathan Bell wnbell at gmail.com
http://graphics.cs.uiuc.edu/~wnbell/



More information about the SciPy-User mailing list