Нашли ошибку?
базовыйNumPy 2.5.3

Округление и clip

Округлить до нужного знака, вниз, вверх или к нулю и ограничить значения диапазоном.

Нужно знать:Арифметика с массивами

Содержание статьи

Коротко

  • np.round(a, decimals) — до заданного числа знаков; отрицательное decimals округляет до десятков, сотен…
  • Половины округляются до чётного (банковское округление): 0.5 → 0, 1.5 → 2, 2.5 → 2.
  • floor — вниз, ceil — вверх, trunc — к нулю. Результат остаётся float; целые — через .astype(int).
  • astype(int) без округления отбрасывает дробную часть.
  • np.clip(a, lo, hi) ограничивает значения: всё меньше lo становится lo, больше hi — hi. Одну границу можно заменить на None.

Синтаксис

np.round(a, decimals=0)      # или a.round(1)
np.floor(a), np.ceil(a), np.trunc(a)
np.clip(a, a_min, a_max)     # или a.clip(0, 100)

Параметры

ПараметрЧто делаетПо умолчанию
decimalsсколько знаков после запятой; отрицательное — округление до 10, 100…0
a_min, a_maxнижняя и верхняя граница clip; None — без этой границыобязательный

Примеры

Данные для примеровиспользуются во всех примерах ниже
prices = np.array([19.49, 5.5, -12.71, 104.5, 7.25])
До целых, десятых и десятков
print(np.round(prices))          # до целых
print(np.round(prices, 1))       # до десятых
np.round(prices, -1)             # до десятков
Вывод
[ 19.   6. -13. 104.   7.]
[ 19.5   5.5 -12.7 104.5   7.2]
array([ 20.,  10., -10., 100.,  10.])
Вниз, вверх, к нулю
print(np.floor(prices))          # вниз
print(np.ceil(prices))           # вверх
np.trunc(prices)                 # к нулю — отбросить дробную часть
Вывод
[ 19.   5. -13. 104.   7.]
[ 20.   6. -12. 105.   8.]
array([ 19.,   5., -12., 104.,   7.])
Округлить и превратить в целые
print(np.round(prices).astype(int))
prices.astype(int)               # без round — дробная часть просто отброшена
Вывод
[ 19   6 -13 104   7]
array([ 19,   5, -12, 104,   7])
Ограничить диапазоном
scores = np.array([-5, 40, 87, 120])
print(np.clip(scores, 0, 100))   # загнать в диапазон [0, 100]
np.clip(scores, 0, None)         # только нижняя граница
Вывод
[  0  40  87 100]
array([  0,  40,  87, 120])

Подводные камни

Половины округляются до чётного

Так работает и встроенный round в Python: при большом количестве данных ошибки округления не накапливаются в одну сторону. Если нужно «школьное» округление половин вверх для положительных чисел — np.floor(a + 0.5).

Округление половин
np.round(np.array([0.5, 1.5, 2.5, 3.5]))
Вывод
array([0., 2., 2., 4.])

np.fix устарел

np.fixустаревший API
np.fix(np.array([1.7, -1.7]))
Вывод
DeprecationWarning: numpy.fix is deprecated. Use numpy.trunc instead, which is faster and follows the Array API standard.
array([ 1., -1.])