numpy.around
- numpy.around(a, decimals=0, out=None)[source]
-
Округляет до заданного числа десятичных знаков.
- Параметры
-
- aarray_like
-
Входные данные.
- decimalsint, необязательно
-
Количество десятичных знаков для округления (по умолчанию: 0). Если decimals отрицательно, оно определяет количество позиций слева от десятичной точки.
- outndarray, необязательно
-
Альтернативный массив вывода, в котором следует разместить результат. Он должен иметь ту же форму, что и ожидаемый результат, но тип значений результата будет преобразован при необходимости. См. Определение типа результата для получения дополнительной информации.
- Возвращаемое значение
-
- rounded_arrayndarray
-
Массив того же типа, что и
a, содержащий округленные значения. Еслиoutне был указан, создается новый массив. Возвращается ссылка на результат.Вещественная и мнимая части комплексных чисел округляются по отдельности. Результат округления числа с плавающей точкой — число с плавающей точкой.
Примечания
Для значений, точно находящихся посередине между округленными десятичными значениями, 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