[SciPy-user] Sparse with fast element-wise multiply?

David Warde-Farley dwf at cs.toronto.edu
Sun Dec 16 14:50:12 EST 2007


On 16-Dec-07, at 2:03 PM, lorenzo bolla wrote:

> converting the matrix from lil_matrix to csc or csr format gives a  
> 140x speed improvement on multiplication.
>
> In [4]: A = scipy.sparse.lil_matrix((1000, 1000))
>
> In [5]: A[:,100] = scipy.rand(1000)
>
> In [6]: A[99, :] = scipy.rand(1000)
>
> In [7]: A.setdiag(scipy.rand(1000))

Hi Lorenzo,

Thanks for your reply. Actually, though, I'm not looking for matrix- 
multiply; I know CSR/CSC is faster for that.

I'm looking for elementwise multiply, i.e. take two matrices of the  
same size, multiply each element in matrix 1 with the corresponding  
element in matrix 2, and put the result in the same position in the  
result matrix (as with matlab's a .* b syntax). It seems lil_matrix is  
the only sparse type that implements .multiply(), and converting to  
lil_matrix is slow, so I've written my own function for multiplying  
two coo_matrix's together. It's a LITTLE slower than .multiply() but  
faster than converting both matrices to lil_matrix and then multiplying.

I'm not entirely sure how CSR and CSC work so it might be possible to  
implement faster elementwise multiplication on top of them.

David




More information about the SciPy-User mailing list