Spec-Zone.ru › NumPy 1.19

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'

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

В качестве альтернативы, встроенная в 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

Spec-Zone.ru

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