Python SciPy SVD与Numpy SVD

Python SciPy SVD与Numpy SVD,python,numpy,scipy,svd,Python,Numpy,Scipy,Svd,SciPy和Numpy都有用于奇异值分解(SVD)的内置函数。这些命令基本上是scipy.linalg.svd和numpy.linalg.svd。这两者有什么区别?它们中有哪一个比另一个好吗?除了错误检查之外,实际工作似乎在 都使用numpy和scipy 在没有进行任何基准测试的情况下,我想性能应该是相同的。从中可以看出,scipy.linalg子模块为Fortran LAPACK库提供了更完整的包装,而numpy.linalg试图独立于LAPACK构建 我对svd函数的不同实现做了一些研究,发

SciPy和Numpy都有用于奇异值分解(SVD)的内置函数。这些命令基本上是
scipy.linalg.svd
numpy.linalg.svd
。这两者有什么区别?它们中有哪一个比另一个好吗?

除了错误检查之外,实际工作似乎在 都使用
numpy
scipy

在没有进行任何基准测试的情况下,我想性能应该是相同的。

从中可以看出,
scipy.linalg
子模块为Fortran LAPACK库提供了更完整的包装,而
numpy.linalg
试图独立于LAPACK构建

我对
svd
函数的不同实现做了一些研究,发现
scipy.linalg.svd
比numpy对应函数更快:

但是,wrapped numpy,aka
jax.numpy.linalg.svd
甚至更快:


基准测试的完整笔记本可用。

我不知道主要行为,但
scipy
版本有两个附加选项:1)
覆盖_a
,它允许对输入进行就地修改,并将减少内存使用并可能加快速度,和2)
检查\u finite
,它允许您在假定数组是有限的情况下调用,从而节省一些开销。谢谢!我不知道jax,这些都是移动的目标。在Windows和Linux上,使用OpenBLAS或MKL,NumPy和SVD的性能现在是相同的。JAX可能更快,我没有测试它。你知道任何真实的,而不是随机的基准测试吗?谢谢