replace values in an array

Question:

as a replacement value for another within an operation with arrays, or how to search within an array and replace a value by another

for example:

array ([[NaN, 1., 1., 1., 1., 1., 1.]
       [1., NaN, 1., 1., 1., 1., 1.]
       [1., 1., NaN, 1., 1., 1., 1.]
       [1., 1., 1., NaN, 1., 1., 1.]
       [1., 1., 1., 1., NaN, 1., 1.]
       [1., 1., 1., 1., 1., NaN, 1.]
       [1., 1., 1., 1., 1., 1., NaN]])

where it can replace NaN by 0.
thanks for any response

Asked By: ricardo

||

Answers:

You could do this:

import numpy as np
x=np.array([[np.NaN, 1., 1., 1., 1., 1., 1.],[1., np.NaN, 1., 1., 1., 1., 1.],[1., 1., np.NaN, 1., 1., 1., 1.], [1., 1., 1., np.NaN, 1., 1., 1.], [1., 1., 1., 1., np.NaN, 1., 1.],[1., 1., 1., 1., 1., np.NaN, 1.], [1., 1., 1., 1., 1., 1., np.NaN]])
x[np.isnan(x)]=0

np.isnan(x) returns a boolean array which is True wherever x is NaN.
x[ boolean_array ] = 0 employs fancy indexing to assign the value 0 wherever the boolean array is True.

For a great introduction to fancy indexing and much more, see also the numpybook.

Answered By: unutbu

these days there is the special function:

a = numpy.nan_to_num(a)
Answered By: clh

Here is the example array in the question:

import numpy as np
a = np.where(np.eye(7), np.nan, 1)

You can either use numpy.where and numpy.isnan functions to create a new array b:

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

Or use an in-place function to directly modify the a array:

np.place(a, np.isnan(a), 0)  # returns None
Answered By: Mike T
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.