我正試圖計算包含NaN的大型numpy數組中的移動平均數。目前我使用:使用NaNs計算numpy數組中的移動平均數
import numpy as np
def moving_average(a,n=5):
ret = np.cumsum(a,dtype=float)
ret[n:] = ret[n:]-ret[:-n]
return ret[-1:]/n
當使用屏蔽數組計算:
x = np.array([1.,3,np.nan,7,8,1,2,4,np.nan,np.nan,4,4,np.nan,1,3,6,3])
mx = np.ma.masked_array(x,np.isnan(x))
y = moving_average(mx).filled(np.nan)
print y
>>> array([3.8,3.8,3.6,nan,nan,nan,2,2.4,nan,nan,nan,2.8,2.6])
結果我要找(下)最好有NaN的只在地方原數組,X,曾NaN,並且平均應在非楠元素的數量來進行的分組(我需要一些方法來改變n的大小的功能。)
y = array([4.75,4.75,nan,4.4,3.75,2.33,3.33,4,nan,nan,3,3.5,nan,3.25,4,4.5,3])
我可以循環整個陣列過來, C heck index by index,但是我使用的數組非常大,這需要很長時間。有沒有一個numpythonic的方式來做到這一點?
所以,是'[4.75,4.75,nan,4.4,3.75,2.33,3.33,4,nan,nan,3,3.5,nan,3.25]'預期的輸出?如果是這樣,爲什麼有一個「NaN」作爲第三個元素? – Divakar
@Divakar這是預期的輸出。在原始數組(x)中,有一個「nan」作爲第三個條目。 – krakenwagon
那麼,爲什麼我們有NaN作爲預期產出的倒數第二項呢? – Divakar