Numpy division by 0 workaround
A simple trick you can use:
x / (y + (y==0))
In action:
x = np.array([1, 5, 3, 7])y = np.array([0, 2, 0, 4])print(x / (y + (y==0)))# [1. 2.5 3. 1.75]
Timings:
def chrisz(x, y): return x/(y+(y==0))def coldspeed1(x, y): m = y != 0 x[m] /= y[m] return xdef coldspeed2(x, y): m = ~(y == 0) x[m] /= y[m] return xdef coldspeed3(x, y): m = np.flatnonzero(y) x[m] /= y[m] return x
Results:
In [33]: x = np.random.randint(10, size=10000).astype(float)In [34]: y = np.random.randint(3, size=10000).astype(float)In [35]: %timeit chrisz(x, y)29.4 µs ± 601 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)In [36]: %timeit coldspeed1(x, y)173 µs ± 2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)In [37]: %timeit coldspeed2(x, y)184 µs ± 1.36 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)In [38]: %timeit coldspeed3(x, y)179 µs ± 2.68 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)