【问题标题】:Why does Scipy sparse implementation returns incorrect number of singular values although dense one returns correct?为什么 Scipy 稀疏实现返回不正确数量的奇异值,尽管密集的返回正确?
【发布时间】:2019-11-03 19:04:48
【问题描述】:

我正在尝试对维度为 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 时,它会成功执行。

【问题讨论】:

    标签: python scipy sparse-matrix svd


    【解决方案1】:

    您可以在scipy 的 scipy 文档中找到此内容,但 k 必须为:1

    【讨论】:

    • 谢谢。然后错误的表述很糟糕,因为 between 包括 min(A.shape)。有什么理由不包括 min(A.shape)?
    • Python 从 0 而不是 1 开始,所以如果你数 0 到 50,它实际上是 51 个值。输入 51 将是 0 到 51 = 52 个值,这将大于您开始时的值。
    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多