Python 我如何转换“a”;“SciPy稀疏矩阵”;至“a”;NumPy矩阵“;?

Python 我如何转换“a”;“SciPy稀疏矩阵”;至“a”;NumPy矩阵“;?,python,numpy,scipy,sparse-matrix,networkx,Python,Numpy,Scipy,Sparse Matrix,Networkx,我正在使用一个名为“关联矩阵(G)”的python函数,它返回图形的关联矩阵。它来自Networkx软件包。我面临的问题是这个函数的返回类型是“Scipy稀疏矩阵”。我需要以numpy矩阵或数组的格式创建事件矩阵。我想知道是否有简单的方法可以做到这一点?或者是否有任何内置函数可以为我完成此转换 谢谢有几种有用的方法,例如,如果a是例如scipy.sparse.csr\u矩阵: a.toarray()或a.a-返回此矩阵的密集ndarray表示形式。(numpy.array,推荐) a.tode

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

谢谢

有几种有用的方法,例如,如果
a
是例如
scipy.sparse.csr\u矩阵

  • a.toarray()
    a.a
    -返回此矩阵的密集ndarray表示形式。(
    numpy.array
    ,推荐)
  • a.todense()
    a.M
    -返回此矩阵的密集矩阵表示形式。(
    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.]])
[1]中的
:将networkx导入为nx
在[2]中:G=nx.图([(1,2)])
[3]:nx.关联矩阵(G)
出[3]:
[4]中:nx.关联矩阵(G).todense()
出[4]:
矩阵([[1.],
[ 1.]])
[5]中:nx.关联矩阵(G).todense().A
出[5]:
数组([[1.],
[ 1.]])

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

我把它翻译成了一种格式,numpy可以准确地解析,然后运行
toarray()

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

实际上是的,它可以工作并提供一个数组。我一直在寻找一种直接(使用python函数)获得包含所有0和1的矩阵的方法。但是谢谢你,如果我找不到更好的,我想最后我会使用数组。另外,你可能想看看。是的,我用过,但问题是当你使用它时,它只将整个稀疏矩阵作为矩阵中的一个元素存储。当您想要打印它时,您将看到以下内容:[[]]
numpy.matrix(numpy.array())
?好的。我想这就是你想要的
numpy.matrix(.toarray())
。这两个属性有很短的别名:如果你的稀疏矩阵是
a
,那么
a.M
返回一个密集的numpy矩阵对象,而
a.a
返回一个密集的numpy数组对象。除非您有很好的理由(而且您可能没有!),否则请坚持使用numpy数组,即
a.a
,并远离numpy矩阵。