python - 为什么 Scipy 稀疏实现会返回错误数量的奇异值,而密集奇异值会返回正确的数量?

标签 python scipy sparse-matrix svd

我正在尝试评估维度为 1401375, 51 的数据集的奇异值分解。当我尝试使用 scipy.linalg.svd 时,它给出了正确的奇异值数量 (51),并且所有这些都是正确的(我对照 LAPACK 进行了检查)。但是,当我尝试使用 scipy.sparse.linalg.svds 时,它会出现错误: ValueError: k 必须介于 1 和 min(A.shape) 之间,k=51

  _, sigma, _ = sp.sparse.linalg.svds(A_s, k=51, return_singular_vectors='vh',which='LM')
_, sigma, _ = sp.linalg.svd(A_D, full_matrices=False,
                                            overwrite_a=True, check_finite=False,
                                            compute_uv=True)

我期望稀疏版本返回 51 个奇异值,但它失败了。当我将k的值降低到50时,它执行成功。

最佳答案

您可以在 scipy 的 scipy 文档中找到它,但 k 必须为: 1 <= k < min(A.shape) 因此,如果您的形状为 1401375, 51,则 min 为 51,并且 k 必须小于不小于或等于

关于python - 为什么 Scipy 稀疏实现会返回错误数量的奇异值,而密集奇异值会返回正确的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694800/

相关文章:

python - 是否有与 MATLAB 的 pearsrnd 函数等效的 Python?

python - 如何从 csv 文件制作稀疏 pandas DataFrame

r - R中的大数据内存问题

python - 运行 Python 延迟循环的最不痛苦的方法

python - CSV Reader 对象获取 ValueError : I/O operation on closed file?

python - 如何使用未知数组维度进行 numpy 组合切片和数组索引

python - 在 curve_fit (scipy) 期间将边界应用于特定变量会导致错误

ruby - 存储稀疏矩阵的数据库

python - 在 QPlainTextEdit 中使用 tqdm 显示终端输出

Python 3.5.1同目录下导入类