我正在学习如何使用Scipy.sparse我首先要检查对角矩阵的稀疏性然而,Scipy声称它并不稀少这是正确的行为吗?
以下代码返回“false”:
import numpy as np
import scipy.sparse as sps
A = np.diag(range(1000))
print sps.issparse(A)
最佳答案
issparse
不检查矩阵的密度是否小于某个任意数,而是检查参数是否是spmatrix
的实例。np.diag(range(1000))
返回标准值:
>>> type(A)
<type 'numpy.ndarray'>
可以用几种方法从中生成稀疏矩阵。随机选择一个:
>>> sps.coo_matrix(A)
<1000x1000 sparse matrix of type '<type 'numpy.int32'>'
with 999 stored elements in COOrdinate format>
>>> m = sps.coo_matrix(A)
>>> sps.issparse(m)
True
但请再次注意,
ndarray
并不关心对象的密度,只关心它是否是特定稀疏矩阵类型的实例。例如:>>> m2 = sps.coo_matrix(np.ones((1000,1000)))
>>> m2
<1000x1000 sparse matrix of type '<type 'numpy.float64'>'
with 1000000 stored elements in COOrdinate format>
>>> sps.issparse(m2)
True