我必须检查矩阵是否具有重数特征值>;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"
我得到的结果是“All distinct”,为了检查,我做了-print set(eig(A)[0])
,得到了
>>>set([2.0000000000000009, 1.9999999999999998, 3.9999999999999982])
特征值是2,2,4,set操作必须使其为{2,4}。但是它将一个2转换为2.0000000000000009,另一个转换为1.99999999998,并使它们看起来不同
我知道,还有其他更长的方法可以使用循环/计数器来检查特征值的差异性,但为什么会发生这种情况
我刚刚发现,通过将浮点/复数值转换为字符串并比较字符串(尽管效率不高),也可以在不使用numpy的情况下实现这一点
正如@JohanC所建议的,您可以使用sympy库,特别是这里的一个可能实现:
相关问题 更多 >
编程相关推荐