我正在使用名为" incidence_matrix(G)"的python函数,它返回图的事件矩阵。它来自Networkx包。我面临的问题是这个函数的返回类型是" Scipy Sparse Matrix"。我需要使用numpy矩阵或数组格式的Incident矩阵。我想知道是否有任何简单的方法可以做到这一点?或者是否有任何内置函数可以为我做这种转换?
由于
答案 0 :(得分:24)
scipy.sparse.*_matrix
有几种有用的方法,例如,如果a
是scipy.sparse.csr_matrix
:
a.todense()
或a.M
- 返回此矩阵的密集矩阵表示。 (numpy.matrix
)a.toarray()
或a.A
- 返回此矩阵的密集ndarray表示。 (numpy.array
)答案 1 :(得分:1)
最简单的方法是对数据调用todense()方法:
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.]])
答案 2 :(得分:0)
我发现在csr矩阵的情况下,todense()
和toarray()
只是包装了元组,而不是以矩阵形式生成数据的ndarray格式化版本。这对于我训练的skmultilearn分类器是无法使用的。
我将其翻译为lil matrix - 格式numpy可以准确解析,然后在其上运行toarray()
:
sparse.lil_matrix(<my-sparse_matrix>).toarray()