SciPy SVD 与 Numpy SVD

问题描述 投票:0回答:4

SciPy 和 Numpy 都内置了奇异值分解 (SVD) 函数。命令基本上是

scipy.linalg.svd
numpy.linalg.svd
。这两者有什么区别?他们中的任何一个比另一个更好吗?

python numpy scipy svd
4个回答
13
投票

FAQ 页面,它说

scipy.linalg
子模块为 Fortran LAPACK 库提供了更完整的包装器,而
numpy.linalg
尝试能够独立于 LAPACK 进行构建。

我为svd函数的不同实现做了一些

基准测试
,发现
scipy.linalg.svd
比numpy对应的更快:

然而,jax包裹的numpy,又名

jax.numpy.linalg.svd
甚至更快:

可在此处获取完整的基准测试笔记本。


2
投票

除了错误检查之外,实际工作似乎是在lapack内完成的 都带有

numpy
scipy

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


2
投票

另一个区别是

np.linalg.svd
可以对大型数据数组进行矢量化
svd
计算,其中
sp.linalg.svd
一次只能执行 1 个操作。

例如:

import numpy as np
import scipy as sp

data = np.random.random((3,3))             # a single matrix
data_array = np.random.random((10**6,3,3)) # one million matrices

# numpy svd
R,S,V = np.linalg.svd(data)       # works
R,S,V = np.linalg.svd(data_array) # works

# scipy svd
R,S,V = sp.linalg.svd(data)       # works
R,S,V = sp.linalg.svd(data_array) # fails !!!

我还没有对此进行基准测试,但是虽然两者之间的直接 1:1 比较可能会显示

sp.linalg.svd
的计算速度更快,但当您需要计算
np.linalg.svd 时,
svd
 可能会更快(或至少更方便) 
在大型数据数组上。


0
投票

在输入矩阵非正半定的情况下,查看 win 和 Linux 之间的平台差异。 SVD 在那里并不唯一,它显示 U 矩阵在某些列上切换了符号。

© www.soinside.com 2019 - 2024. All rights reserved.