проверка на равенство матриц в 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
→ Ссылка