Search code examples
pythonnumpymultidimensional-arraydivisiondivide-by-zero

Make elements with value division by zero equal to zero in a 2D numpy array


I have a code snippet:

import numpy as np
x1 = [[1,4,2,1],       
      [1,1,4,5],
      [0.5,0.3, 1,6],
      [0.8,0.2,0.7,1]]

x2 = [[7,0,2,3],       
      [8,0,4,5],
      [0.1,0, 2,6],
      [0.1,0,0.16666667,6]]

np.true_divide(x1, x2)

The output is:

array([[0.14285714,        inf, 1.        , 0.33333333],
       [0.125     ,        inf, 1.        , 1.        ],
       [5.        ,        inf, 0.5       , 1.        ],
       [8.        ,        inf, 4.19999992, 0.16666667]])

I am aware that some elements will have zerodivision error which can be seen as 'inf'.

How can I use 'try and except' to change all these 'inf' results into 0? Or is there a better method to convert all those 'inf's into 0?


Solution

  • 0/0 can handle by adding invalid='ignore' to numpy.errstate() introducing numpy.nan_to_num() to convert np.nan to 0.

    with np.errstate(divide='ignore', invalid='ignore'):
        c = np.true_divide(x1,x2)
        c[c == np.inf] = 0
        c = np.nan_to_num(c)
    print(c)
    

    Output

    [[0.14285714 0.         1.         0.33333333]
     [0.125      0.         1.         1.        ]
     [5.         0.         0.5        1.        ]
     [8.         0.         4.19999992 0.16666667]]