繁体   English   中英

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

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

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

谢谢

scipy.sparse.*_matrix有几个有用的方法,例如,如果a是例如scipy.sparse.csr_matrix

  • a.toarray()aA - 返回此矩阵的密集ndarray表示。 numpy.array ,推荐)
  • a.todense()aM - 返回此矩阵的密集矩阵表示。 numpy.matrix

最简单的方法是在数据上调用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.]])

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

我把它翻译成一个lil矩阵 - 一个格式numpy可以准确解析,然后运行toarray()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM