Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Finding Nonzero Elements in a Sparse Matrix

Reply
Thread Tools

Finding Nonzero Elements in a Sparse Matrix

 
 
deLenn
Guest
Posts: n/a
 
      11-07-2006
Hi,

Does scipy have an equivalent to Matlab's 'find' function, to list the
indices of all nonzero elements in a sparse matrix?

Cheers.

 
Reply With Quote
 
 
 
 
Nick Vatamaniuc
Guest
Posts: n/a
 
      11-07-2006
The function you might want is nonzero() or flatnonzero()

>>> from numpy import *


>>> a=array([ [1,2],[0,4] ])


>>> a

array([[1, 2],
[0, 4]])

>>> flatnonzero(a)

array([0, 1, 3])

nonzero() will return the a sequence of index arrays of non zero
elements
flatnonzero() returns the non-zero elements of the flattened version
of the array.

Cheers,
Nick Vatamaniuc



deLenn wrote:
> Hi,
>
> Does scipy have an equivalent to Matlab's 'find' function, to list the
> indices of all nonzero elements in a sparse matrix?
>
> Cheers.


 
Reply With Quote
 
 
 
 
deLenn
Guest
Posts: n/a
 
      11-07-2006
Thanks for the reply.

'nonzero' deos not seem to work with sparse matrices. here is an
example:


from scipy import *
A = sparse.lil_matrix((3,3))
A[1,2] = 10
A[2,0] = -10

nonzero(A)
>>> ()



(I tried it with an ordinary matrix, and it works fine)

Cheers.

















Nick Vatamaniuc wrote:
> The function you might want is nonzero() or flatnonzero()
>
> >>> from numpy import *

>
> >>> a=array([ [1,2],[0,4] ])

>
> >>> a

> array([[1, 2],
> [0, 4]])
>
> >>> flatnonzero(a)

> array([0, 1, 3])
>
> nonzero() will return the a sequence of index arrays of non zero
> elements
> flatnonzero() returns the non-zero elements of the flattened version
> of the array.
>
> Cheers,
> Nick Vatamaniuc
>
>
>
> deLenn wrote:
> > Hi,
> >
> > Does scipy have an equivalent to Matlab's 'find' function, to list the
> > indices of all nonzero elements in a sparse matrix?
> >
> > Cheers.


 
Reply With Quote
 
Robert Kern
Guest
Posts: n/a
 
      11-07-2006
deLenn wrote:
> Hi,
>
> Does scipy have an equivalent to Matlab's 'find' function, to list the
> indices of all nonzero elements in a sparse matrix?


You will want to ask scipy questions on the scipy list.

http://www.scipy.org/Mailing_Lists

There is no explicit interface on sparse matrix objects to expose the indices of
the nonzero elements. A different implementation would have to be written for
each type of sparse matrix format. However, if one can spare the memory, one can
convert to the coordinate list format and read the row and column indices from
that object.


In [1]: from scipy.sparse import lil_matrix

In [2]: A = lil_matrix((3,3))

In [3]: A[1,2] = 10

In [4]: A[2,0] = -10

In [5]: Acoo = A.tocoo()

In [6]: Acoo.row
Out[6]: array([2, 1])

In [7]: Acoo.col
Out[7]: array([0, 2])


--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco

 
Reply With Quote
 
Nick Vatamaniuc
Guest
Posts: n/a
 
      11-08-2006
de Lenn,

Sorry I assumed the nonzero would work for sparse matrices as well.

BUT! -- If the sparse matrix used is the default scipy's
sparse.lil_matrix, you just need to print out the representation
because the lil_matrix is implemented as a _sequence of non-zero
elements_ i.e. just what you need.

In other words it is kind of silly to provide a nonzero for lil_matrix
because it has _only_ non-zero elements.

Well, here is the example:
------------------------------------
>>> from scipy import *
>>> A=sparse.lil_matrix((3,3))
>>> A[1,2]=10
>>> A[2,0]=-10
>>> print A

(1, 2) 10
(2, 0) -10
>>>

------------------------------------

The only way it could be helpful is if you get a lil_matrix returned as
an object from some code and you need to list all the elements...

Hope this helps,
Nick Vatamaniuc


deLenn wrote:
> Thanks for the reply.
>
> 'nonzero' deos not seem to work with sparse matrices. here is an
> example:
>
>
> from scipy import *
> A = sparse.lil_matrix((3,3))
> A[1,2] = 10
> A[2,0] = -10
>
> nonzero(A)
> >>> ()

>
>
> (I tried it with an ordinary matrix, and it works fine)
>
> Cheers.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> Nick Vatamaniuc wrote:
> > The function you might want is nonzero() or flatnonzero()
> >
> > >>> from numpy import *

> >
> > >>> a=array([ [1,2],[0,4] ])

> >
> > >>> a

> > array([[1, 2],
> > [0, 4]])
> >
> > >>> flatnonzero(a)

> > array([0, 1, 3])
> >
> > nonzero() will return the a sequence of index arrays of non zero
> > elements
> > flatnonzero() returns the non-zero elements of the flattened version
> > of the array.
> >
> > Cheers,
> > Nick Vatamaniuc
> >
> >
> >
> > deLenn wrote:
> > > Hi,
> > >
> > > Does scipy have an equivalent to Matlab's 'find' function, to list the
> > > indices of all nonzero elements in a sparse matrix?
> > >
> > > Cheers.


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Sparse Matrix implemented as a doubly-linked list adam.kleinbaum@gmail.com C Programming 5 06-25-2007 01:33 PM
sparse matrix class implementation mariaczi C++ 7 06-09-2006 09:17 AM
Sparse Matrix operations friends C Programming 0 09-17-2005 04:30 AM
nonzero values? Luis Esteban Valencia ASP .Net 2 01-14-2005 06:03 AM
nonzero != 1, right? Trent Buck C Programming 28 11-18-2004 11:47 AM



Advertisments