Scipy.sparse测试稀疏矩阵对于对角矩阵返回False。为什么?

3

我正在学习如何使用Scipy.sparse。我尝试检查对角矩阵的稀疏性。然而,Scipy声称它不是稀疏的。这是正确的行为吗?

下面的代码返回“False”:

import numpy as np
import scipy.sparse as sps
A = np.diag(range(1000))
print sps.issparse(A)
1个回答

5

issparse不会检查矩阵密度是否小于某个任意值,它检查参数是否是spmatrix的实例。

np.diag(range(1000))返回一个标准的ndarray

>>> 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

但需要注意的是,issparse 对对象的密度并不在意,而仅仅关心它是否是某个特定稀疏矩阵类型的实例。例如:

>>> 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接