Spec-Zone.ru › NumPy 1.20

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API