Заменить значения в массиве

в качестве значения замены для другого в рамках операции с массивами или как искать в массиве и заменять значение другим

например:

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]])

где он может заменить NaN на 0. спасибо за любой ответ

Ответы

Ответ 1

Вы можете сделать это:

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) возвращает логический массив, который True везде, где x равен NaN. x[ boolean_array ] = 0 использует причудливую индексацию, чтобы присвоить значение 0 везде, где булев массив равен True.

Для отличного введения в фантастическую индексацию и многое другое, см. также numpybook.

Ответ 2

в наши дни существует специальная функция:

a = numpy.nan_to_num(a)

Ответ 3

Вот пример массива в вопросе:

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

Вы можете использовать numpy.where и numpy.isnan для создания нового массива b:

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

Или используйте встроенную функцию для непосредственного изменения массива a:

np.place(a, np.isnan(a), 0)  # returns None