Настил до ближайшего кратного 0,2 в numpy? - PullRequest
2 голосов
/ 01 марта 2020

Как мне записать число с точностью до 0,2 в numpy?

Например, у меня есть это:

0.2 * np.floor(xi / 0.2)

Это работает большую часть времени, например

>>> xi = 9.4
>>> 0.2 * np.floor(xi / 0.2)
9.4

Однако для некоторых чисел это не удается, например, 9,6

>>> xi = 9.6
>>> 0.2 * np.floor(xi / 0.2)
9.4

Я ожидаю, что предыдущий расчет вернет 9,4.

Как это исправить?

Ответы [ 2 ]

3 голосов
/ 01 марта 2020

Это потому, что формат с плавающей запятой - обратите внимание, что 9.6/0.2 возвращает 47.9999999....

Некоторое округление здесь и там поможет:

round(0.2*np.floor(round(xi / 0.2,2)),1)

Внутреннее округление 2 знака после запятой , чтобы убедиться, что вы не потеряете точность, и все равно будет что-то на пол. Внешний раунд - так что вы будете иметь правильное округление до 0.2 (а не, например, 9.6000...1)

2 голосов
/ 01 марта 2020

Использование np.round

0.2 * np.round(xi / 0.2)

вывод:

9.600000000000001

Немного лишний результат обусловлен математикой с плавающей запятой.

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