[SciPy-User] Can I copy a sparse matrix into an existing dense numpy matrix?

Warren Weckesser warren.weckesser@enthought....
Sun Feb 5 09:21:01 CST 2012


On Sun, Feb 5, 2012 at 9:05 AM, Conrad Lee <conradlee@gmail.com> wrote:

>  Say I have a huge numpy matrix *A* taking up tens of gigabytes. It takes
> a non-negligible amount of time to allocate this memory.
>
> Let's say I also have a collection of scipy sparse matrices with the same
> dimensions as the numpy matrix. Sometimes I want to convert one of these
> sparse matrices into a dense matrix to perform some vectorized operations
> that can't be performed on sparse matrices.
>
> Can I load one of these sparse matrices into *A* rather than re-allocate
> space each time I want to convert a sparse matrix into a dense matrix? The
> .toarray() and .todense() methods which are available on scipy sparse
> matrices do not seem to take an optional dense array argument, but maybe
> there is some other way to do this.
>
> (I've also started a stackoverflow version of this question here<http://stackoverflow.com/questions/9041236/load-sparse-scipy-matrix-into-existing-numpy-dense-matrix>
> .)
>
> Thanks,
>
> Conrad lee
>
>
If your sparse matrix is in coo format, you can use fancy indexing to
assign the values to the existing array.  For example:

In [29]: import scipy.sparse as sp

In [30]: import numpy as np

In [31]: a = sp.coo_matrix([[0,0,1,0],[0,0,0,0],[2,0,3,0],[0,4,0,0]])

In [32]: d = np.zeros((4,4), dtype=np.int32)

In [33]: a.todense()
Out[33]:
matrix([[0, 0, 1, 0],
        [0, 0, 0, 0],
        [2, 0, 3, 0],
        [0, 4, 0, 0]])

In [34]: d[a.row, a.col] = a.data

In [35]: d
Out[35]:
array([[0, 0, 1, 0],
       [0, 0, 0, 0],
       [2, 0, 3, 0],
       [0, 4, 0, 0]])


Warren
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/scipy-user/attachments/20120205/686770e2/attachment.html 


More information about the SciPy-User mailing list