Заменить значения в массиве
в качестве значения замены для другого в рамках операции с массивами или как искать в массиве и заменять значение другим
например:
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