exception - 在 numpy 的 svd 方法中使用替代 LAPACK 驱动程序?

标签 exception numpy lapack svd

我正在使用 numpy.svd 来计算条件不良矩阵的奇异值分解。对于某些特殊情况,svd 不会收敛并引发 Linalg.Error。我做了一些研究,发现 numpy 使用 LAPACK 中的 DGEESDD 例程。标准实现的硬编码迭代限制为 35 次或更多迭代。如果我尝试在 Matlab 中分解相同的矩阵,一切都会正常,我认为有两个原因: 1. Matlab 使用 DGESVD 而不是 DGEESDD,后者通常看起来更稳健。 2. Matlab 在例程中使用 75 次迭代限制。 (他们在源代码中更改了它并重新编译了它。)

现在的问题是:是否有一种简单的方法可以将 numpy 中使用的后端从 DGEESDD 更改为 DGESVD,而无需修改 numpy 源?

提前致谢 米莎

最佳答案

对我有用的是只计算 "economy size" SVD该矩阵X:

U,S,V = np.linalg.svd(X, full_matrices=False)

关于exception - 在 numpy 的 svd 方法中使用替代 LAPACK 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10681812/

相关文章:

c - 使用 Visual Studio 2012 C 链接 lapack

c - 动态二维数组转静态数组

java - 从命令行读取文件时出现数组越界异常。 java

java - 我生疏了,不知道如何在 Java swing 中正确处理异常

python - 使用 matplotlib 绘制两种不同的 SVM 方法有问题吗?

python - “numpy”没有属性 'core'

openmp - 使用 OpenMP 拆分 LAPACK 调用

wcf - "No destination configuration registered"- 使用 SAP nCo3(SAP .NET 连接器 3.0)的 WCF/SAP 集成

java - 源代码无法编译——未报告异常java.lang.Exception;必须被捕获或宣布被扔出

python - 圆形递归地在嵌套字典中 float