Подтвердить что ты не робот

Лучшее округление в Python NumPy.around: округление NumPy массивов

Я ищу способ объединить массив numpy более интуитивным способом. У меня есть несколько плавающих чисел, и я хотел бы ограничить их лишь несколькими десятичными знаками. Это будет сделано как таковое:

>>>import numpy as np
>>>np.around([1.21,5.77,3.43], decimals=1)
array([1.2, 5.8, 3.4])

Теперь проблема возникает при попытке округлить числа, которые находятся точно между шагами округления. Я бы хотел, чтобы 0.05 округлялся до 0,1, но np.around устанавливается на округление до "ближайшего четного числа". Это дает следующее:

>>>np.around([0.55, 0.65, 0.05], decimals=1)
array([0.6, 0.6, 0.0])

Мой вопрос тогда составляет, что является наиболее эффективным способом округления до ближайшего числа, а не просто ближайшего четного числа.

Для получения дополнительной информации о np.around см. его документацию.

4b9b3361

Ответ 1

Способ around делает это правильно, но если вы хотите сделать что-то другое, вы можете, например, вычесть сумму, намного меньшую точности округления, например,

def myround(a, decimals=1):
     return np.around(a-10**(-(decimals+5)), decimals=decimals)

In [22]: myround(np.array([ 1.21,  5.77,  3.43]), 1)
Out[22]: array([ 1.2,  5.8,  3.4])

In [23]: myround(np.array([ 0.55,  0.65,  0.05]), 1)
Out[23]: array([ 0.5,  0.6,  0. ])

Причина, по которой я выбрал 5 здесь, заключалась в том, что, не включая четное/нечетное различие, вы подразумеваете введение средней ошибки около 10 ** (- (decimal + 1))/2, t жалуются на явную ошибку 1/10000th этой ошибки.