Лучшее округление в 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 см. его документацию.
Ответы
Ответ 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 этой ошибки.