【问题标题】:SciPy SVD vs. Numpy SVDSciPy SVD 与 Numpy SVD
【发布时间】:2015-12-10 17:07:47
【问题描述】:

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

【问题讨论】:

  • 我不知道主要行为,但scipy 版本有两个附加选项:1) overwrite_a,它允许对输入进行就地修改并减少内存使用和可能会加快速度,并且 2) check_finite 允许您在调用时假设数组是有限的,从而节省一些小开销。

标签: python numpy scipy svd


【解决方案1】:

FAQ page,它说scipy.linalg 子模块为Fortran LAPACK 库提供了更完整的包装,而numpy.linalg 试图能够独立于LAPACK 构建。

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

但是,jax 包裹 numpy,又名 jax.numpy.linalg.svd 更快:

可通过here 获取完整的基准测试笔记本。

【讨论】:

  • 谢谢!我不知道 jax。
  • 这些有点移动目标。在 Windows 和 Linux 上,使用 OpenBLAS 或 MKL,NumPy 和 SVD 的性能现在是相同的。 JAX 可能仍然更快,我没有测试它。
  • 您知道任何真实的而非随机的基准吗?谢谢
【解决方案2】:

除了错误检查,实际工作似乎在lapack内完成 numpyscipy

没有做任何基准测试,我猜性能应该是相同的。

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 2015-11-15
    • 2018-11-25
    • 2010-12-24
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多