Numpy возвращает False, хотя оба массива одинаковы? - PullRequest
0 голосов
/ 12 марта 2020

Из моего понимания numpy команда np.equal([x, prod]) сравнивает элемент массива по элементам и возвращает True для каждого, если они равны. Но каждый раз, когда я выполняю команду, она возвращает False для первого сравнения. С другой стороны, если я скопирую и вставлю два массива в команду, она вернет True для обоих, как вы можете видеть на скриншоте. Итак, почему есть разница между ними?

enter image description here

1 Ответ

1 голос
/ 12 марта 2020

Вы не можете сравнивать числа с плавающей точкой, так как они являются только приблизительными. Когда вы сравниваете их по жестко заданным значениям, они будут равны, поскольку они аппроксимируются точно таким же образом. Но как только вы примените к ним некоторую математическую операцию, больше невозможно будет проверить, равны ли две плавающие точки.

Например, это

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...