numpy.around
-
numpy.around(a, decimals=0, out=None)[source] -
Округляет значение до заданного числа десятичных знаков.
- Параметры
-
-
aarray_like -
Входные данные.
-
decimalsint, optional -
Количество десятичных знаков для округления (по умолчанию: 0). Если decimals отрицательное, оно указывает на количество позиций слева от десятичной точки.
-
outndarray, optional -
Альтернативный массив вывода, в который следует поместить результат. Он должен иметь такую же форму, как ожидаемый результат, но тип значений результата будет приведен к необходимому, если это необходимо. См.
ufuncs-output-typeдля получения дополнительной информации.
-
- Возвращает
-
-
rounded_arrayndarray -
Массив того же типа, что и
a, содержащий округленные значения. Еслиoutне был указан, создается новый массив. Возвращается ссылка на результат.Вещественная и мнимая части комплексных чисел округляются по отдельности. Результат округления числа с плавающей точкой — число с плавающей точкой.
-
Примечания
Для значений, находящихся ровно посередине между округленными десятичными значениями, NumPy округляет до ближайшего чётного значения. Таким образом, 1,5 и 2,5 округляются до 2,0, -0,5 и 0,5 округляются до 0,0 и т. д.
np.aroundиспользует быстрый, но порой неточный алгоритм для округления чисел с плавающей точкой. Для положительныхdecimalsон эквивалентенnp.true_divide(np.rint(a * 10**decimals), 10**decimals), что связано с погрешностью из-за неточного представления десятичных дробей в стандарте IEEE с плавающей точкой [1] и ошибками, возникающими при масштабировании степенями десяти. Например, обратите внимание на дополнительную «1» в следующем:>>> np.round(56294995342131.5, 3) 56294995342131.51
Если вашей целью является печать таких значений с фиксированным количеством десятичных знаков, предпочтительнее использовать встроенные в NumPy процедуры печати чисел с плавающей точкой для ограничения количества десятичных знаков, которые будут выведены:
>>> np.format_float_positional(56294995342131.5, precision=3) '56294995342131.5'
Встроенные процедуры печати чисел с плавающей точкой используют точный, но значительно более вычислительно затратный алгоритм для вычисления количества цифр после десятичной точки.
В качестве альтернативы, встроенная в Python функция
roundиспользует более точный, но более медленный алгоритм для 64-битовых чисел с плавающей точкой:>>> round(56294995342131.5, 3) 56294995342131.5 >>> np.round(16.055, 2), round(16.055, 2) # equals 16.0549999999999997 (16.06, 16.05)
Список литературы
-
1 -
“Конспекты лекций по статусу IEEE 754”, Уильям Кахан, https://people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF
-
2 -
“Насколько бесполезны бессознательные оценки округления при вычислениях с плавающей точкой?”, Уильям Кахан, https://people.eecs.berkeley.edu/~wkahan/Mindless.pdf
Примеры
>>> np.around([0.37, 1.64]) array([0., 2.]) >>> np.around([0.37, 1.64], decimals=1) array([0.4, 1.6]) >>> np.around([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value array([0., 2., 2., 4., 4.]) >>> np.around([1,2,3,11], decimals=1) # ndarray of ints is returned array([ 1, 2, 3, 11]) >>> np.around([1,2,3,11], decimals=-1) array([ 0, 0, 0, 10])
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.around.html