Numpy array element-wise division (1/x)

34,972

Solution 1

1 / array makes an integer division and returns array([1, 0, 0, 0]).

1. / array will cast the array to float and do the trick:

>>> array = np.array([1, 2, 3, 4])
>>> 1. / array
array([ 1.        ,  0.5       ,  0.33333333,  0.25      ])

Solution 2

Other possible ways to get the reciprocal of each element of an array of integers:

array = np.array([1, 2, 3, 4])

Using numpy's reciprocal:

inv = np.reciprocal(array.astype(np.float32))

Cast:

inv = 1/(array.astype(np.float32))

Solution 3

I tried :

inverse=1./array

and that seemed to work... The reason

1/array

doesn't work is because your array is integers and 1/<array_of_integers> does integer division.

Share:
34,972
Admin
Author by

Admin

Updated on June 11, 2020

Comments

  • Admin
    Admin almost 4 years

    My question is very simple, suppose that I have an array like

    array = np.array([1, 2, 3, 4])
    

    and I'd like to get an array like

    [1, 0.5, 0.3333333, 0.25]
    

    However, if you write something like

    1/array
    

    or

    np.divide(1.0, array)
    

    it won't work.

    The only way I've found so far is to write something like:

    print np.divide(np.ones_like(array)*1.0, array)
    

    But I'm absolutely certains that there is a better way to do that. Does anyone have any idea?