How do I transform a “SciPy sparse matrix” to a “NumPy matrix”?

本小妞迷上赌 提交于 2019-12-06 17:24:00

问题


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


回答1:


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

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



回答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.]])



回答3:


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()


来源:https://stackoverflow.com/questions/26576524/how-do-i-transform-a-scipy-sparse-matrix-to-a-numpy-matrix

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!