Numpy 应用scipy.sparse.linalg.svds将返回nan值

Numpy 应用scipy.sparse.linalg.svds将返回nan值,numpy,scipy,sparse-matrix,svd,arpack,Numpy,Scipy,Sparse Matrix,Svd,Arpack,我开始使用scipy.sparse库,当我尝试应用scipy.sparse.linalg.svds时,如果有零个奇异值,我会得到一个错误 我这样做是因为最后我将使用非常大和非常稀疏的矩阵,其条目只有{+1,-1},它们是而不是正方形(>1100*1000大小,稀疏度>0.99),我想知道它们的秩。 我大致知道秩是什么,它几乎是满的,所以只有知道最后的奇异值才能告诉我秩到底是什么 这就是为什么我选择使用scipy.sparse.linalg.svds并设置which='LM'。如果秩未满,则会出现

我开始使用scipy.sparse库,当我尝试应用scipy.sparse.linalg.svds时,如果有零个奇异值,我会得到一个错误

我这样做是因为最后我将使用非常大和非常稀疏的矩阵,其条目只有{+1,-1},它们是而不是正方形(>1100*1000大小,稀疏度>0.99),我想知道它们的秩。 我大致知道秩是什么,它几乎是满的,所以只有知道最后的奇异值才能告诉我秩到底是什么

这就是为什么我选择使用
scipy.sparse.linalg.svds
并设置
which='LM'
。如果秩未满,则会出现零的奇异值,这是我的代码:

import numpy as np 
import scipy.sparse as sp
import scipy.sparse.linalg as la

a = np.array([[0, 0, 0], [0, 0, 0], [1, 1, -1]], dtype='d')
sp_a = sp.csc_matrix(a)
s = la.svds(sp_a, k=2, return_singular_vectors=False, which='SM')
print(s)
输出为

[           nan 9.45667059e-12]
/usr/lib/python3/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py:1849:RuntimeWarning:sqrt中遇到无效值
s=np.sqrt(eigvals)

你有没有想过为什么会这样? 也许还有另一种有效的方法来知道秩,知道我有一个很大的非平方非常稀疏的矩阵,几乎是满秩的

scipy版本1.1.0 numpy版本1.14.5 Linux平台

提前谢谢