为什么在numpy数组上设置函数返回略有不同的值?

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

我必须检查矩阵的特征值是否具有多重性> 1。使用numpy的eig函数,我得到了一个数组并将其转换为集合,该集合应删除重复的特征值,并比较列表和集合的长度,我们可以推断是否存在重复的特征值。代码如下-] >

from numpy.linalg import eig
A=[[3,1,1],[2,4,2],[-1,-1,1]]
if len(eig(A)[0])!=len(set(eig(A)[0])):
    print "Multiple eigenvalues found!"
else:
    print "All distinct"

我得到的结果为“所有不同”,并检查我是否做到了-print set(eig(A)[0])并得到

>>>set([2.0000000000000009, 1.9999999999999998, 3.9999999999999982])特征值是2,2,4,并且设置操作必须使其为{2,4}。但是它将一个2转换为2.0000000000000009,将另一个2转换为1.9999999999999998,并使它们看起来不同。

我知道,还有其他更长的方法使用循环/计数器来检查特征值的不同性,但是为什么会发生这种情况?

我必须检查矩阵的特征值是否具有多重性> 1。使用numpy的eig函数,我得到了一个数组并将其转换为set,该数组应删除重复的特征值并比较...

python numpy math set scientific-computing
2个回答
1
投票

如@JohanC所建议,您可以使用sympy库,特别是这里可能的实现:


0
投票

我刚刚发现,通过将float / complex值转换为字符串并比较字符串(尽管不是很有效),也可以不使用numpy来做到这一点(尽管不是很有效)-

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