我正在尝试评估维度为 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/