Индексирование условий numpy массив чисел с плавающей запятой - PullRequest
0 голосов
/ 17 апреля 2020
import numpy as np

n = 10
xmin = 0
xmax = 1
dx = 1/n
x = np.arange(xmin-dx, xmax + 2*dx, dx)
print(x)
print(x <= 0.3)

Вывод этого кода следующий:

[-0.1  0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1.   1.1]
[ True  True  True  True False False False False False False False False
 False]

Почему элемент в массиве со значением 0.3 не меньше или равен 0,3? Я попробовал то же самое с другими сравнениями, и я увидел, что -0,1 <= -0,1 и 0,1 <= 0,1, а 0,2 не меньше или равно 0,2. На самом деле не понимаю, что здесь происходит. </p>

1 Ответ

0 голосов
/ 17 апреля 2020

Я понял. Никогда не сравнивайте числа с плавающей точкой из-за ошибки округления. Это будет работать:

print(x <= 0.3 + np.finfo(np.float64).eps)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...