Вы не можете сравнивать числа с плавающей точкой, так как они являются только приблизительными. Когда вы сравниваете их по жестко заданным значениям, они будут равны, поскольку они аппроксимируются точно таким же образом. Но как только вы примените к ним некоторую математическую операцию, больше невозможно будет проверить, равны ли две плавающие точки.
Например, это
a = 0
for i in range(10):
a += 1/10
print(a)
print(a == 1)
даст вам 0.9999999999
и False
, хотя (1/10) * 10 = 1.
Чтобы сравнить значения с плавающей точкой, необходимо сравнить два значения с небольшим значением дельты. Другими словами, проверьте, являются ли они действительно очень маленьким значением. Например,
a = 0
for i in range(10):
a += 1/10
delta = 0.00000001
print(a)
print(abs(a - 1) < delta)
даст вам True
.
Для numpy вы можете использовать numpy .isclose для получения маски или numpyp.allclose , если вам нужно только значение True или False.