Мне пришлось проверить, имеет ли матрица собственное значение с кратностью> 1 или нет. Используя функцию eig numpy, я получил массив и преобразовал его в набор, который должен удалить повторяемое собственное значение и сравнивая длину списка и множества, мы можем сделать вывод, есть ли повторяющиеся собственные значения или нет. Код приведены ниже -
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 и операция set должна сделать его {2,4}. Но он конвертирует один 2 в 2.0000000000000009, а другой - в 1.9999999999999998 и делает их кажущимися отличными.
Я знаю, что могут быть другие более длинные методы, использующие цикл / счетчик для проверки четкости собственных значений, но почему это происходит?