numpy.round#

numpy.round(a, decimals=0, выход=None)[источник]#

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

Параметры:
aarray_like

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

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

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

выходndarray, необязательно

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

Возвращает:
rounded_arrayndarray

Массив того же типа, что и a, содержащий округлённые значения. Если только выход был указан, создаётся новый массив. Возвращается ссылка на результат.

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

Смотрите также

ndarray.round

эквивалентный метод

around

псевдоним для этой функции

ceil, fix, floor, rint, trunc

Примечания

Для значений, точно находящихся посередине между округленными десятичными значениями, NumPy округляет до ближайшего четного значения. Таким образом, 1.5 и 2.5 округляются до 2.0, -0.5 и 0.5 округляются до 0.0 и т.д.

np.round использует быстрый, но иногда неточный алгоритм для округления типов данных с плавающей точкой. Для положительных 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

Примеры

>>> import numpy as np
>>> np.round([0.37, 1.64])
array([0., 2.])
>>> np.round([0.37, 1.64], decimals=1)
array([0.4, 1.6])
>>> np.round([.5, 1.5, 2.5, 3.5, 4.5]) # rounds to nearest even value
array([0., 2., 2., 4., 4.])
>>> np.round([1,2,3,11], decimals=1) # ndarray of ints is returned
array([ 1,  2,  3, 11])
>>> np.round([1,2,3,11], decimals=-1)
array([ 0,  0,  0, 10])