【发布时间】:2018-12-17 06:46:38
【问题描述】:
什么是 numpy 或 scipy 等价物
[V, D]= eig(A,-B)
还有
[V, D]= eigs(A,-B, 60, ‘SM')
【问题讨论】:
什么是 numpy 或 scipy 等价物
[V, D]= eig(A,-B)
还有
[V, D]= eigs(A,-B, 60, ‘SM')
【问题讨论】:
看看scipy.linalg.eig和scipy.sparse.linalg.eigs。
import scipy.linalg as la
import scipy.sparse.linalg as sla
# Matlab: [V, D] = eig(A, -B)
D, V = la.eig(A, -B)
# Matlab: [V, D]= eigs(A, -B, 60, ‘SM')
D, V = sla.eigs(A, 60, -B, which='SM')
请注意,您通常不会得到完全相同的结果。特征值可能有不同的顺序,特征向量可能有不同的缩放比例(特征向量不是唯一的)。
【讨论】:
D = [-0.6 ; -0.485446217248779 ;-1.21030705211835e-17]。并使用 Python Scipy:[-6.00000000e-01+0.j, 3.51562903e-01+0.j, -1.41560356e-17+0.j]。所以第一个特征值相同,但第二个特征值有点不同。我可以看到第三个基本上为零。这两个特征值怎么会一样呢?
scipy.__version__是'1.2.0.dev0+3385e00'),scipy结果和Matlab一致。我会进一步调查(但不是马上)。与此同时,你能做同样的比较,但矩阵不是那么简并吗?你的A 和B 都排名第一。
sla 部分给出的错误为:in eigs symmetric=False, tol=tol) File "C:\Python\lib\site-packages\scipy\sparse\linalg\eigen\arpack\arpack.py", line 1069, in get_OPinv_matvec return LuInv(A - sigma * M).matvec TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')。知道为什么会这样吗?
我相信您正在寻找的是:numpy.linalg.eig() 和 numpy.linalg.eigh(),但也有 scipy 对应的 scipy.linalg.eig() 和 scipy.linalg.eigh(),它们可能被编译后提供略有不同的行为和性能。
【讨论】: