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

时间:2016-12-16 12:31:37

标签: python numpy nan

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

在运行上面的代码时,我得到了foll。警告,我理解这个警告的原因,但是如何避免呢?

RuntimeWarning: invalid value encountered in greater

1 个答案:

答案 0 :(得分:1)

存储有效的索引(非NaN)。首先,我们将使用这些索引索引到数组并执行比较以获取掩码然后再次索引到具有该掩码的那些索引以检索对应于原始顺序的索引。使用原始排序的索引,我们可以将输入数组中的元素分配给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])