Округлить до ближайшего шага - PullRequest
1 голос
/ 22 октября 2011

Я хотел бы знать, как я могу округлить число до нуля до верхнего или нижнего порога, который является функцией предопределенного размера шага.Надеюсь, более четко изложенное, если у меня число 123 и размер шага, равный 50, мне нужно округлить 123 до ближайшего из 150 или 100, в данном случае 100. Я вышел с функцией ниже, которая выполняет работуно мне интересно, есть ли лучший, более лаконичный способ сделать это.

Заранее спасибо,

Паоло

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)

1 Ответ

9 голосов
/ 22 октября 2011

Я думаю, вам не нужно numpy:

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

здесь a - это одно число, если вы хотите векторизовать эту функцию, вам нужно только заменить round на np.round и float(a) с np.array(a, dtype=float)

...