numpy.around
-
numpy.around(a, decimals=0, out=None)[source] -
Округляет значения до заданной точности.
- Parameters
-
-
aarray_like -
Входные данные.
-
decimalsint, optional -
Число десятичных знаков для округления (по умолчанию: 0). Если decimals отрицательное, оно указывает количество позиций слева от десятичной точки.
-
outndarray, optional -
Альтернативный массив вывода, в который поместить результат. Он должен иметь такую же форму, как ожидаемый результат, но тип значений вывода будет преобразован при необходимости. Подробнее см. Определение типа вывода.
-
- Returns
-
-
rounded_arrayndarray -
Массив того же типа, что и
a, содержащий округленные значения. Еслиoutне был указан, создается новый массив. Возвращается ссылка на результат.Вещественная и мнимая части комплексных чисел округляются по отдельности. Результат округления числа с плавающей точкой — число с плавающей точкой.
-
См. также
-
ndarray.round -
эквивалентный метод
-
ceil, fix, floor, rint,trunc
Примечания
Для значений, находящихся ровно посередине между округляемыми десятичными значениями, 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 -
“Lecture Notes on the Status of IEEE 754”, William Kahan, https://people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF
-
2 -
“How Futile are Mindless Assessments of Roundoff in Floating-Point Computation?”, William Kahan, 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.around.html