Finding Nonzero Elements in a Sparse Matrix

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • deLenn

    #1

    Finding Nonzero Elements in a Sparse Matrix

    Hi,

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

    Cheers.

  • Nick Vatamaniuc

    #2
    Re: Finding Nonzero Elements in a Sparse Matrix

    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.

    Comment

    • deLenn

      #3
      Re: Finding Nonzero Elements in a Sparse Matrix

      Thanks for the reply.

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


      from scipy import *
      A = sparse.lil_matr ix((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.

      Comment

      • Robert Kern

        #4
        Re: Finding Nonzero Elements in a Sparse Matrix

        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.



        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

        Comment

        • Nick Vatamaniuc

          #5
          Re: Finding Nonzero Elements in a Sparse Matrix

          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_matr ix, 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_matr ix((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.

          Comment

          Working...