Round in numpy to Nearest Step

12,224

I think you don't need numpy:

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

here a is a single number, if you want to vectorize this function you only need to replace round with np.round and float(a) with np.array(a, dtype=float)

Share:
12,224

Related videos on Youtube

RandomCPlusPlus
Author by

RandomCPlusPlus

Updated on June 04, 2022

Comments

  • RandomCPlusPlus
    RandomCPlusPlus almost 2 years

    I would like to know how I can round a number in numpy to an upper or lower threshold which is function of predefined step size. Hopefully stated in a clearer way, if I have the number 123 and a step size equal to 50, I need to round 123 to the closest of either 150 or 100, in this case 100. I came out with function below which does the work but I wonder if there is a better, more succint, way to do this.

    Thanks in advance,

    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)