Python vs Matlab中的特征值和特征向量

时间:2018-07-22 12:40:20

标签: python matlab numpy eigenvalue eigenvector

我注意到,matlab如何计算矩阵的特征值和特征向量,其中matlab返回实值,而numpy返回复杂值特征值和向量。例如:

对于矩阵:

showChannels

有没有一种方法可以像在Matlab中那样获取python中的真实特征值?

1 个答案:

答案 0 :(得分:1)

要使NumPy在复杂部分较小时返回真实特征值的对角线数组,可以使用

In [116]: np.real_if_close(np.diag(w))
Out[116]: 
array([[ 4.,  0.,  0.],
       [ 0., -2.,  0.],
       [ 0.,  0., -2.]])

根据Matlab docs[E, D] = eig(A)返回满足E的{​​{1}}和D: 我没有Matlab,所以我将使用Octave来检查您发布的结果:

A*E = E*D

误差的幅度主要是由于Matlab报告的值是 displayed to a lower precision比Matlab在内存中保存的实际值高。


在NumPy中,octave:1> A = [[1, -3, 3], [3, -5, 3], [6, -6, 4]] octave:6> E = [[ -0.4082, -0.8103, 0.1933], [ -0.4082, -0.3185, -0.5904], [ -0.8165, 0.4918, -0.7836]] octave:25> D = [[4.0000, 0, 0], [0, -2.0000, 0], [0, 0, -2.0000]] octave:29> abs(A*E - E*D) ans = 3.0000e-04 0.0000e+00 3.0000e-04 3.0000e-04 2.2204e-16 3.0000e-04 0.0000e+00 4.4409e-16 6.0000e-04 返回w, v = np.linalg.eig(A)w,它们满足 v

np.dot(A, v) = np.dot(v, np.diag(w))