Redondear en cantidad al paso más cercano

Me gustaría saber cómo puedo redondear un número en número a un umbral superior o inferior que es función de un tamaño de paso predefinido. Esperemos que se indique de una manera más clara, si tengo el número 123 y un tamaño de paso igual a 50, tengo que redondear 123 al más cercano, ya sea 150 o 100, en este caso 100. Salí con la siguiente función que hace el trabajo pero me pregunto si hay una manera mejor, más sucinta, de hacer esto.

Gracias por adelantado,

Paolo

def getRoundedThresholdv1(a, MinClip): import numpy as np import math digits = int(math.log10(MinClip))+1 b = np.round(a, -digits) if b > a: # rounded-up c = b - MinClip UpLow = np.array((b,c)) else: # rounded-down c = b + MinClip UpLow = np.array((c,b)) AbsDelta = np.abs(a - UpLow) return UpLow[AbsDelta.argmin()] getRoundedThresholdv1(143, 50) 

Creo que no necesitas numpy

 def getRoundedThresholdv1(a, MinClip): return round(float(a) / MinClip) * MinClip 

aquí a es un solo número, si desea vectorizar esta función solo necesita reemplazar round con np.round y float(a) con np.array(a, dtype=float)