numpy - 应用 scipy.sparse.linalg.svds 返回 nan 值
问题描述
我开始使用 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: invalid value encountered in sqrt
s = np.sqrt(eigvals)
关于为什么会发生这种情况的任何想法?也许还有另一种知道秩的有效方法,知道我有一个几乎满秩的大型非方形非常稀疏矩阵?
scipy 1.1.0 版 numpy 1.14.5 版 Linux 平台
提前致谢
解决方案
推荐阅读
- regex - 正则表达式查找连接的文本
- ios - 如何在 Swift 中以比这更好的方式排列数组?
- javascript - Javascript TypeError: undefined is not a constructor (evalating 'new _Team.GameTeam('name', 'null')')
- typescript - “?”有什么用?在变量后使用时在打字稿中
- makefile - 从源代码构建 GNU make。GIT 存储库中缺少文件
- python - Python 关闭 Python 后关闭程序
- javascript - 在 Object 中声明一个新变量
- python - 如何在绘制计数图时修复 x 轴标签的重叠?
- html - 滚动捕捉问题
- docker - gitlab CI/CD: 带有 git 的 docker 镜像