【发布时间】:2017-12-05 20:12:28
【问题描述】:
由于 SVD 分解不是唯一的(左右奇异向量对可以同时翻转其符号),我想知道 scipy.linalg.svd() 返回的 U 和 V 矩阵在多大程度上是“确定性的”/始终相同?
我在我的机器上用随机数组尝试了几次,它似乎总是返回相同的东西(幸运的是),但是这会因机器而异吗?
【问题讨论】:
标签: numpy scipy linear-algebra svd eigenvector
由于 SVD 分解不是唯一的(左右奇异向量对可以同时翻转其符号),我想知道 scipy.linalg.svd() 返回的 U 和 V 矩阵在多大程度上是“确定性的”/始终相同?
我在我的机器上用随机数组尝试了几次,它似乎总是返回相同的东西(幸运的是),但是这会因机器而异吗?
【问题讨论】:
标签: numpy scipy linear-algebra svd eigenvector
SciPy 和 Numpy 都通过外包给 LAPACK _gesdd 例程来计算 SVD。此例程的任何确定性实现每次在具有给定 LAPACK 实现的给定机器上都会产生相同的结果,但据我所知,不能保证不同的 LAPACK 实现(即 NETLIB 与 MKL,OSX 与 Windows 等)将使用相同的约定。如果您的应用程序依赖于解决符号歧义的某种约定,那么在奇异向量的某种后处理中自己确保它是最安全的; Resolving the Sign Ambiguity in the 中给出了一种有用的方法。
奇异值分解 (pdf)
【讨论】: