如何将“SciPy 稀疏矩阵”转换为“NumPy 矩阵”?

问题描述 投票:0回答:3

我正在使用一个名为“incidence_matrix(G)”的Python函数,它返回图的事件矩阵。它来自 Networkx 包。我面临的问题是该函数的返回类型是“Scipy Sparse Matrix”。我需要 numpy 矩阵或数组格式的事件矩阵。我想知道是否有任何简单的方法可以做到这一点?或者是否有任何内置函数可以为我完成此转换?

谢谢

python numpy scipy sparse-matrix networkx
3个回答
67
投票

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 开始,这些方法已经或将被弃用。


4
投票

我发现,对于 csr 矩阵,

todense()
toarray()
只是包装元组,而不是以矩阵形式生成 ndarray 格式的数据版本。这对于我正在训练的 skmultilearn 分类器来说是无法使用的。

我将其转换为 lil 矩阵——一种 numpy 可以准确解析的格式,然后运行

toarray()

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

2
投票

最简单的方法是对数据调用 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.]])
© www.soinside.com 2019 - 2024. All rights reserved.