我有一个一维数据集,其中一些没有数据值设置为 9999。这是一个摘录,因为它很长:
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
我想用两边最接近的值的平均值替换无数据值,但是由于一些无数据值也具有最接近的值作为无数据值,替换它们有点困难。即我希望将三个无数据值替换为-2。我创建了一个循环来遍历数组中的每个标量并测试没有数据:
for k in this_array:
if k == 9999:
temp = np.where(k == 9999, (abs(this_array[k-1]-this_array[k+1])/2), this_array[k])
else:
pass
this_array[k] = temp
但是,如果它也等于 9999,我需要添加一个 if 函数或方法来获取 k-1 之前或 k+1 之后的值,例如:
if np.logical_or(k+1 == 9999, k-1 == 9999):
temp = np.where(k == 9999, (abs(this_array[k-2]-this_array[k+2])/2), this_array[k])
可以看出,这段代码会变得混乱,因为最终可能会采用错误的值或以嵌套的 if 函数告终。有谁知道实现这一点的更简洁的方法,因为它在整个数据集中变化很大?
根据要求:如果第一个和/或最后一个点没有数据,最好将它们替换为最近的数据点。