Python 带有scipy.linalg.eig或eigvals的ComplexWarning

Python 带有scipy.linalg.eig或eigvals的ComplexWarning,python,scipy,eigenvalue,Python,Scipy,Eigenvalue,我试图在Python中解决一个广义特征值问题,因此我将使用。具体来说,我打电话 scipy.linalg.eigvals(A, B) 其中A和B是包含复数的相同形状的两个数组 当我这样做时,我得到以下警告: /usr/lib/python2.7/dist-packages/scipy/linalg/decomp.py:57: ComplexWarning: Casting complex values to real discards the imaginary part overwrite

我试图在Python中解决一个广义特征值问题,因此我将使用。具体来说,我打电话

scipy.linalg.eigvals(A, B)
其中
A
B
是包含复数的相同形状的两个数组

当我这样做时,我得到以下警告:

/usr/lib/python2.7/dist-packages/scipy/linalg/decomp.py:57: ComplexWarning: Casting complex values to real discards the imaginary part

overwrite_a, overwrite_b)
它不会产生预期的特征值。如果我将
B
设置为具有实值,同时保持
A
复杂,则也会发生这种情况,反之亦然。仅当两个数组仅包含
浮动时,才会显示警告

当我使用
eig
而不是
eigvals
时,也会发生这种情况

但是,根据,阵列可能很复杂:

知道为什么会弹出这个警告吗?如果有人能解释发生了什么,我会很高兴。谢谢

编辑:我刚刚检查了我的scipy版本,它是最新版本。然而,我不是在自己的电脑上工作,所以我不想麻烦技术人员更新,除非问题来自这里


编辑:事实证明,即使出现警告,特征值实际上是正确的。正如Warren Weckesser指出的那样,scipy版本0.10.0及以上版本不会出现警告。

您的
B
是可逆的吗?在单矩阵模式下使用函数时,我没有收到警告(
eigvals(dot(A,inv(B)))
)。即使得到警告,我也能得到正确的特征值;您能否提供一个示例,说明您在哪里得到了错误的特征值?版本0.10.0中进行了更改,以避免出现不必要的ComplexWarning:。然而,这并不能解释为什么你得到的价值不是你所期望的。你能把数组和你得到的结果一起添加到问题中吗?嗨。感谢您指出特征值仍然应该是正确的。在玩了更多的测试用例之后,我注意到它们确实是正确的(即使有警告),并且我将它们与之进行比较的分析解决方案是错误的。