Хранить индексы годные (не - Nans). Во-первых, мы будем использовать эти индексы для индексации в массив и выполнения сравнения, чтобы получить маску, а затем снова индексировать индексы с этой маской, чтобы вернуть индексы, соответствующие исходному порядку. Используя индексы с оригинальным заказом, мы могли бы затем присвоить элементы во входном массиве NaNs
.
Таким образом, реализация/решение было бы -
idx = np.flatnonzero(~np.isnan(aa))
aa[idx[aa[idx] > 1.0]] = np.nan
Пример запуска -
In [106]: aa # Input array with NaNs
Out[106]: array([ 0., 3., nan, 0., 9., 6., 6., nan, 18., 6.])
In [107]: idx = np.flatnonzero(~np.isnan(aa)) # Store valid indices
In [108]: idx
Out[108]: array([0, 1, 3, 4, 5, 6, 8, 9])
In [109]: aa[idx[aa[idx] > 1.0]] = np.nan # Do the assignment
In [110]: aa # Verify
Out[110]: array([ 0., nan, nan, 0., nan, nan, nan, nan, nan, nan])
Вы хотите заменить значения NaN в Numpy массиве или просто устранить 'RuntimeWarning'? Если последнее, 'np.seterr (invalid = 'ignore')' достаточно. Обратите внимание на этот вопрос (http://stackoverflow.com/questions/15192637/runtimewarning-invalid-value-encountered-in-maximum) – gzc