aa = np.array([2.0, np.NaN])
aa[aa>1.0] = np.NaN
在运行上面的代码时,我得到了foll。警告,我理解这个警告的原因,但是如何避免呢?
RuntimeWarning: invalid value encountered in greater
答案 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])