我正在使用 numpy.svd 来计算条件不良矩阵的奇异值分解。对于某些特殊情况,svd 不会收敛并引发 Linalg.Error。我做了一些研究,发现 numpy 使用 LAPACK 的 DGESDD 例程。标准实现的硬编码迭代限制为 35 次或其他迭代。如果我尝试在 Matlab 中分解相同的矩阵,一切正常,我认为有两个原因: 1. Matlab 使用 DGESVD 而不是 DGESDD,这通常看起来更健壮。2. Matlab 在例程中使用了 75 次的迭代限制。(他们在源代码中对其进行了更改并重新编译。)
现在的问题是:有没有一种简单的方法可以将 numpy 中使用的后端从 DGESDD 更改为 DGESVD 而无需修改 numpy 源?
在此先感谢米沙