проверка на равенство матриц в numpy
Недавно потребовалось проделать некоторые операции с матрицами, и я воспользовался библиотекой numpy. Переменные answer и C равны, но почему-то при проверке на равенство не все значения установлены в True:
import numpy as np
A = np.array(
[
[1., 3.],
[-3., 1.],
]
)
B = np.array(
[
[1., 0.],
[0., 5.],
]
)
C = np.array(
[
[3., 2.],
[0., 5.],
]
)
A_1 = np.linalg.inv(A)
B_1 = np.linalg.inv(B)
X = A_1.dot(C).dot(B_1)
answer = A.dot(X).dot(B)
print(answer)
print(C)
print(answer == C)
Ответы (1 шт):
Автор решения: mkkik
→ Ссылка
Все дело в точности представления чисел с плавающей запятой. Ошибка копится в процессе выполнения арифметических операций (но при выводе через print происходит округление до определенного знака, поэтому визуально разницы в числах не видна).
Если посмотреть элементы матриц отдельно, то можно видеть примерно следующее:
answer[0][0] # -> 2.9999999999999996
C[0][0] # -> 3.0
Для сравнения стоит использовать специальную функцию из numpy - np.allclose:
np.allclose(answer, C) # -> True