替换包含 NaN 的 numpy 数组中的值

Replace values in numpy array containing NaN

aa = np.array([2.0, np.NaN])
aa[aa>1.0] = np.NaN

在 运行 上面的代码中,我明白了。警告,我明白这个警告的原因,但是如何避免呢?

RuntimeWarning: invalid value encountered in greater

存储有效索引(非 NaN)。首先,我们将使用这些索引对数组进行索引并执行比较以获得掩码,然后再次使用该掩码对这些索引进行索引以检索与原始顺序对应的索引。使用原始排序的索引,我们可以将输入数组中的元素分配给 NaNs.

因此,implementation/solution 将是 -

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