我会按照以下思路做些事情:import numpy as np
def fill(arr, fwd_fill):
out = arr.copy()
if fwd_fill:
start, end, step = 0, len(out), 1
else:
start, end, step = len(out)-1, -1, -1
cur = out[start]
for i in range(start, end, step):
if np.isnan(out[i]):
out[i] = cur
else:
cur = out[i]
return out
def avg(arr):
fwd = fill(arr, True)
back = fill(arr, False)
return (fwd[:-2] + back[2:]) / 2.
arr = np.array([ 4, 4, 1, np.nan, np.nan, np.nan, -5, -4])
print arr
print avg(arr)
用最接近的NaN替换non函数,可以用一个最接近的NaN函数代替NaN。在
一旦你有了它,计算平均值是微不足道的,并且是由第二个函数完成的。在
你没有说你希望如何处理第一个和最后一个元素,所以代码只是把它们切掉。在
最后,值得注意的是,如果缺少输入数组的第一个或最后一个元素(在这种情况下,没有数据来计算某些平均值),函数可以返回nan。在