抑制可忽略不计的复杂numpy特征值?

问题描述 投票:1回答:1

我正在计算协方差矩阵的特征值,它是真实的和对称的正半确定矩阵。因此,特征值和特征向量都应该是实数,然而numpy.linalg.eig()返回具有(几乎)零虚数分量的复数值。

协方差矩阵太大而不能在这里发布,但特征值表示为

[1.38174e01+00j, 9.00153e00+00j, ....]

-9.7557e-16j中,向量中最大的虚部可忽略不计。

我认为这里存在一些机器精度问题,因为很明显虚数组件可以忽略不计(假设我的协方差矩阵是真正的pos半def)。

有没有办法抑制使用numpy eig(或scipy)返回虚构组件?我试图避免if语句检查特征值对象是否复杂,然后将其设置为仅实际组件,如果可能的话。

python numpy linear-algebra eigenvalue
1个回答
1
投票

我认为这个特定案例的最佳解决方案是使用@PaperPanzer的建议,即np.linalg.eigh。这直接用于Hermitian矩阵,因此只有真实的Eigen值,恰好是这个特定的用例。


通常,要检索数组中数字的实部,就像这样简单:

>>> np.real(np.array([1+1j,2+1j]))
array([ 1.,  2.])

numpy.real返回你的数字的真实部分。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.