我會按照以下思路做些事情: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。在