Spec-Zone.ru › NumPy 1.21

numpy.around

numpy.around(a, decimals=0, out=None)[source]

Округляет до заданного числа десятичных знаков.

Параметры
aarray_like

Входные данные.

decimalsint, необязательно

Количество десятичных знаков для округления (по умолчанию: 0). Если decimals отрицательно, оно определяет количество позиций слева от десятичной точки.

outndarray, необязательно

Альтернативный массив вывода, в котором следует разместить результат. Он должен иметь ту же форму, что и ожидаемый результат, но тип значений результата будет преобразован при необходимости. См. Определение типа результата для получения дополнительной информации.

Возвращаемое значение
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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.around.html

Spec-Zone.ru

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