[SciPy-User] fancy indexation of sparse matrices is terrible slow
Dmitrey
tmp50 at ukr.net
Mon Dec 14 15:51:20 EST 2009
От кого: Nathan Bell <wnbell at gmail.com>
The CSR and CSC formats also support fast fancy indexing. Something like:
>>> A = ... some sparse matrix
>>> csr_matrix(A)[I,J]
ought to work well.
I have tried all 3, lil works faster than any others, but casting to numpy ndarray and invoking it on the dense array obtained works several times faster, that is extremely important for me. Thus on my problem with sparse matrix of shape 151* 1178
each time casting it to dense before applying fancy indexing makes numerical optimization ipopt solver works faster from 130 to 60 sec. Here's the code that demonstrates the difference:
from scipy.sparse import lil_matrix, find
from numpy import where, zeros, prod, vstack, ones
from time import time
n, m = 1000, 20000
M = vstack((zeros((n, m)), ones((25, m))))
I, J = where(M)
# 1: time for lil
M = lil_matrix(M)
print 'sparsity of the matrix:', float(M.size)/prod(M.shape)
t = time()
M[I, J]
print('time elapsed with lil: %f' % (time()-t))
# 2: time for dense
t = time()
M = M.A # even with this time elapsed is less
M[I, J]
print('time elapsed with ndarray: %f' % (time()-t))
# output:
# sparsity of the matrix: 0.0243902439024
# time elapsed with lil: 17.006631
# time elapsed with ndarray: 0.710046
# as for csr and csc fancy indexation it works several times slower
So, I have filed a ticket for it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20091214/f02b8a35/attachment.html>
More information about the SciPy-User
mailing list