我必须检查矩阵的特征值是否具有多重性> 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,该数组应删除重复的特征值并比较...
如@JohanC所建议,您可以使用sympy库,特别是这里可能的实现:
我刚刚发现,通过将float / complex值转换为字符串并比较字符串(尽管不是很有效),也可以不使用numpy来做到这一点(尽管不是很有效)-