如何转换" SciPy稀疏矩阵"一个" NumPy矩阵"?

时间:2014-10-26 18:37:53

标签: python numpy scipy sparse-matrix networkx

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

由于

3 个答案:

答案 0 :(得分:24)

scipy.sparse.*_matrix有几种有用的方法,例如,如果ascipy.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()