[Numpy-discussion] How to apply Numpy ufunc to Scipy sparse matrices?

Pengkui Luo pengkui.luo at gmail.com
Sun Sep 11 15:27:54 EDT 2011


On Sun, Sep 11, 2011 at 13:23, Pauli Virtanen <pav at iki.fi> wrote:

> Sun, 11 Sep 2011 03:03:26 -0500, Pengkui Luo wrote:
> [clip]
> > However, converting a large sparse matrix to dense would easily eat up
> > the memory. Is there a way for np.sign (as well as other ufunc) to take
> > a sparse matrix as parameter, and return a sparse matrix?
>
> For CSR, CSC, and DIA you can do
>
>        x.data = some_ufunc(x.data)
>
> to operate on the nonzero entries. If some_ufunc(0) == 0, that's all you
> need. Otherwise, the matrix becomes dense.
>
>        Pauli
>


Hi Pauli,

Thanks for your ".data" tip. It works!


def _test_ufunc():
    import numpy as np
    from scipy.sparse import csr_matrix
    A = np.mat( '2 3 0 0; 0 0 0 6; 1 0 0 -7; 0 -2 -1 0' )
    print 'A=\n', A
    AS = csr_matrix(A)
    AS.data = np.sign( AS.data )
    print '\ntype(AS.data)=%s' % type( AS.data )
    print '\nnp.sign(AS)=\n%s' % AS.todense()
    print '\ntype(AS)=%s' % type(AS)

if __name__=="__main__":
    _test_ufunc()

>>>

A=
[[ 2  3  0  0]
 [ 0  0  0  6]
 [ 1  0  0 -7]
 [ 0 -2 -1  0]]

type(AS.data)=<type 'numpy.ndarray'>

np.sign(AS)=
[[ 1  1  0  0]
 [ 0  0  0  1]
 [ 1  0  0 -1]
 [ 0 -1 -1  0]]

type(AS)=<class 'scipy.sparse.csr.csr_matrix'>


--Pengkui
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110911/ad5fb9be/attachment.html>


More information about the NumPy-Discussion mailing list