459,292 Members | 1,467 Online Need help? Post your question and get tips & solutions from a community of 459,292 IT Pros & Developers. It's quick & easy.

# Finding Nonzero Elements in a Sparse Matrix

 P: n/a Hi, Does scipy have an equivalent to Matlab's 'find' function, to list the indices of all nonzero elements in a sparse matrix? Cheers. Nov 7 '06 #1
4 Replies

 P: n/a 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. Nov 7 '06 #2

 P: n/a 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. Nov 7 '06 #3

 P: n/a 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 : from scipy.sparse import lil_matrix In : A = lil_matrix((3,3)) In : A[1,2] = 10 In : A[2,0] = -10 In : Acoo = A.tocoo() In : Acoo.row Out: array([2, 1]) In : Acoo.col Out: 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 Nov 7 '06 #4

 P: n/a 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]=10A[2,0]=-10print 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. Nov 8 '06 #5

### This discussion thread is closed

Replies have been disabled for this discussion. 