无法将稀疏矩阵转换为密集矩阵
Unable to convert a sparse matrix to a dense one
我有矩阵 Gx
和 Gy
都是 coo 类型的稀疏矩阵。
我用它们执行以下操作:
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
?
发件人:
array([ <16x16 sparse matrix of type '<type 'numpy.float64'>'
以压缩稀疏行格式存储 64 个元素>], dtype=object)
我推断 C
是一个包含 dtype=object
的 1 元素密集数组。那一个元素是一个稀疏矩阵。
所以我希望
C[0].toarray()
会起作用的。如错误所述,numpy
数组没有 toarray
方法。但在这种情况下,它的元素会。
由于 Gx
和 Gy
是稀疏的,因此您需要使用 hstack
和 vstack
的稀疏版本,而不是 numpy
版本。检查 A
和 B
的类型。我是那些 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 个稀疏元素。
我有矩阵 Gx
和 Gy
都是 coo 类型的稀疏矩阵。
我用它们执行以下操作:
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
?
发件人:
array([ <16x16 sparse matrix of type '<type 'numpy.float64'>'
以压缩稀疏行格式存储 64 个元素>], dtype=object)
我推断 C
是一个包含 dtype=object
的 1 元素密集数组。那一个元素是一个稀疏矩阵。
所以我希望
C[0].toarray()
会起作用的。如错误所述,numpy
数组没有 toarray
方法。但在这种情况下,它的元素会。
由于 Gx
和 Gy
是稀疏的,因此您需要使用 hstack
和 vstack
的稀疏版本,而不是 numpy
版本。检查 A
和 B
的类型。我是那些 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 个稀疏元素。