53

I am using a python function called "incidence_matrix(G)", which returns the incident matrix of graph. It is from Networkx package. The problem that I am facing is the return type of this function is "Scipy Sparse Matrix". I need to have the Incident matrix in the format of numpy matrix or array. I was wondering if there is any easy way of doing that or not? Or is there any built-in function that can do this transformation for me or not?

Thanks

7
  • 1
    Actually yes, it works and gives you an array. I was looking for a way to directly (using python functions) get the matrix having all zeros and ones. But thank you for that, I think finally I will go with the array if I could not find anything better. Commented Oct 26, 2014 at 18:49
  • Also, you may want to look at this. Commented Oct 26, 2014 at 18:54
  • Yes, I used that but the problem with that is when you use it, it only stores the whole sparse matrix as one element in a matrix. when you wanna print it, you will see this: [[ <4x4 sparse matrix of type '<type 'numpy.float64'>' with 8 stored elements in Compressed Sparse Column format>]] Commented Oct 26, 2014 at 18:56
  • 1
    What about numpy.matrix(numpy.array(<your_matrix_object>))? Commented Oct 26, 2014 at 19:01
  • 1
    OK. I think this is what you want numpy.matrix(<your_matrix_object>.toarray()). Commented Oct 26, 2014 at 19:04

3 Answers 3

81

The scipy.sparse.*_matrix has several useful methods, for example, if a is e.g. scipy.sparse.csr_matrix:

  • a.toarray() - Return a dense ndarray representation of this matrix. (numpy.array, recommended)
  • a.todense() - Return a dense matrix representation of this matrix. (numpy.matrix)

Previously, these methods had shorthands (.A for .toarray(), and .M for .todense()), but these have been or will be deprecated as of Scipy v1.14.0.

Sign up to request clarification or add additional context in comments.

1 Comment

Those two attributes have short aliases: if your sparse matrix is a, then a.M returns a dense numpy matrix object, and a.A returns a dense numpy array object. Unless you have very good reasons for it (and you probably don't!), stick to numpy arrays, i.e. a.A, and stay away from numpy matrix.
5

I found that in the case of csr matrices, todense() and toarray() simply wrapped the tuples rather than producing a ndarray formatted version of the data in matrix form. This was unusable for the skmultilearn classifiers I'm training.

I translated it to a lil matrix- a format numpy can parse accurately, and then ran toarray() on that:

sparse.lil_matrix(<my-sparse_matrix>).toarray()

Comments

2

The simplest way is to call the todense() method on the data:

In [1]: import networkx as nx

In [2]: G = nx.Graph([(1,2)])

In [3]: nx.incidence_matrix(G)
Out[3]: 
<2x1 sparse matrix of type '<type 'numpy.float64'>'
    with 2 stored elements in Compressed Sparse Column format>

In [4]: nx.incidence_matrix(G).todense()
Out[4]: 
matrix([[ 1.],
        [ 1.]])

In [5]: nx.incidence_matrix(G).todense().A
Out[5]: 
array([[ 1.],
       [ 1.]])

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.