无法将稀疏矩阵转换为密集矩阵

时间:2015-11-07 00:05:54

标签: python numpy sparse-matrix

我的矩阵GxGy都是稀疏的类型。

我用它们执行以下操作:

A = np.hstack((Gx.transpose(),Gy.transpose()))
B = np.vstack((Gx,Gy))

L = np.dot(A,B)

我希望可视化解决方案,C所以我使用了C.toarray()和C.todense(),但答案如下:

In [391]: C
Out[391]: 
  array([ <16x16 sparse matrix of type '<type 'numpy.float64'>'
with 64 stored elements in Compressed Sparse Row format>], dtype=object)


In [392]: C.toarray() 
Traceback (most recent call last):
   File "<ipython-input-390-86c90f8dce51>", line 1, in <module>
    C.toarray()
AttributeError: 'numpy.ndarray' object has no attribute 'toarray'

如何以密集形式查看矩阵C

1 个答案:

答案 0 :(得分:3)

自:

array([ <16x16 sparse matrix of type '<type 'numpy.float64'>'

64个存储元素,压缩稀疏行格式&gt;],dtype = object)

我推断C是一个带有dtype=object的1元素密集数组。那一个元素是一个稀疏矩阵。

所以我希望

 C[0].toarray()  

会奏效。如错误所示,numpy数组没有toarray方法。但在这种情况下,它的元素确实如此。

由于GxGy稀疏,因此您需要使用hstackvstack的稀疏版本,而不是numpy版本。检查AB的类型。我是那些numpy数组,而不是稀疏矩阵。

当我将np.hstack与几个稀疏矩阵一起使用时,看看会发生什么:

In [70]: M=sparse.csr_matrix([[0,1,2],[2,3,4]])
In [71]: np.hstack([M,M])
/usr/lib/python3/dist-packages/scipy/sparse/compressed.py:298: SparseEfficiencyWarning: Comparing sparse matrices using >= and <= is inefficient, using <, >, or !=, instead.
  "using <, >, or !=, instead.", SparseEfficiencyWarning)
Out[71]: 
array([ <2x3 sparse matrix of type '<class 'numpy.int32'>'
    with 5 stored elements in Compressed Sparse Row format>,
       <2x3 sparse matrix of type '<class 'numpy.int32'>'
    with 5 stored elements in Compressed Sparse Row format>], dtype=object)

结果不是稀疏的,而是密集的2个稀疏元素。