我正在使用一个名为“incidence_matrix(G)”的Python函数,它返回图的事件矩阵。它来自 Networkx 包。我面临的问题是该函数的返回类型是“Scipy Sparse Matrix”。我需要 numpy 矩阵或数组格式的事件矩阵。我想知道是否有任何简单的方法可以做到这一点?或者是否有任何内置函数可以为我完成此转换?
谢谢
scipy.sparse.*_matrix
有几种有用的方法,例如,如果a
是例如scipy.sparse.csr_matrix
:
a.toarray()
- 返回该矩阵的密集 ndarray 表示。 (numpy.array
,推荐)a.todense()
- 返回该矩阵的密集矩阵表示。 (numpy.matrix
)以前,这些方法有简写(
.A
表示 .toarray()
,.M
表示 .todense()
),但从 Scipy v1.14.0 开始,这些方法已经或将被弃用。
我发现,对于 csr 矩阵,
todense()
和 toarray()
只是包装元组,而不是以矩阵形式生成 ndarray 格式的数据版本。这对于我正在训练的 skmultilearn 分类器来说是无法使用的。
我将其转换为 lil 矩阵——一种 numpy 可以准确解析的格式,然后运行
toarray()
:
sparse.lil_matrix(<my-sparse_matrix>).toarray()
最简单的方法是对数据调用 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.]])