Spec-Zone.ru › NumPy 1.18

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 не был указан, создается новый массив. Возвращается ссылка на результат.

Вещественные и мнимые части комплексных чисел округляются отдельно. Результатом округления числа с плавающей точкой является число с плавающей точкой.

См. также

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'

Встроенные функции NumPy для печати чисел с плавающей точкой используют точный, но значительно более вычислительно затратный алгоритм для вычисления количества цифр после десятичной точки.

В качестве альтернативы, встроенная функция 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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.around.html

Spec-Zone.ru

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