How to return 0 with divide by zero How to return 0 with divide by zero python python

How to return 0 with divide by zero


In numpy v1.7+, you can take advantage of the "where" option for ufuncs. You can do things in one line and you don't have to deal with the errstate context manager.

>>> a = np.array([-1, 0, 1, 2, 3], dtype=float)>>> b = np.array([ 0, 0, 0, 2, 2], dtype=float)# If you don't pass `out` the indices where (b == 0) will be uninitialized!>>> c = np.divide(a, b, out=np.zeros_like(a), where=b!=0)>>> print(c)[ 0.   0.   0.   1.   1.5]

In this case, it does the divide calculation anywhere 'where' b does not equal zero. When b does equal zero, then it remains unchanged from whatever value you originally gave it in the 'out' argument.


Building on @Franck Dernoncourt's answer, fixing -1 / 0 and my bug on scalars:

def div0( a, b, fill=np.nan ):    """ a / b, divide by 0 -> `fill`        div0( [-1, 0, 1], 0, fill=np.nan) -> [nan nan nan]        div0( 1, 0, fill=np.inf ) -> inf    """    with np.errstate(divide='ignore', invalid='ignore'):        c = np.true_divide( a, b )    if np.isscalar( c ):        return c if np.isfinite( c ) \            else fill    else:        c[ ~ np.isfinite( c )] = fill        return c


Building on the other answers, and improving on:

Code:

import numpy as npa = np.array([0,0,1,1,2], dtype='float')b = np.array([0,1,0,1,3], dtype='float')with np.errstate(divide='ignore', invalid='ignore'):    c = np.true_divide(a,b)    c[c == np.inf] = 0    c = np.nan_to_num(c)print('c: {0}'.format(c))

Output:

c: [ 0.          0.          0.          1.          0.66666667]