Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Divide one numpy array by another only where both arrays are non-zero

Tags:

numpy

What's the easiest, most Pythonic way to divide one numpy array by another (of the same shape, element-wise) only where both arrays are non-zero?

Where either the divisor or dividend is zero, the corresponding element in the output array should be zero. (This is the default output when the divisor is zero, but np.nan is the default output when the dividend is zero.)

like image 319
dbliss Avatar asked Feb 15 '23 12:02

dbliss


2 Answers

This still tries to divide by 0, but it gives the correct result:

np.where(b==0, 0, a/b)

To avoid doing the divide-by-zero, you can do:

m = b!=0
c = np.zeros_like(a)
np.place(c, m, a[m]/b[m])
like image 51
askewchan Avatar answered Feb 17 '23 01:02

askewchan


I would do it in two lines:

z = x/y
z[y == 0] = 0

As you said, if only the element in x is 0, z will already be 0 at that position. So let NumPy handle that, and then fix up the places where y is 0 by using NumPy's boolean indexing.

like image 21
mtrw Avatar answered Feb 17 '23 03:02

mtrw