Коротко
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…0a_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(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.])