This question關於如何獲得移動平均線有很多有用的答案。 我已經嘗試了numpy卷積和numpy cumsum這兩種方法,並且都在示例數據集上工作得很好,但在我的真實數據上生成了較短的數組。移動平均產生不同長度的數組?
數據被隔開0.01
。示例數據集的長度爲50
,真實數據爲數萬。所以它必須是造成問題的窗口大小,我不太明白函數中發生了什麼。
這是我如何定義功能:
def smoothMAcum(depth,temp, scale): # Moving average by cumsum, scale = window size in m
dz = np.diff(depth)
N = int(scale/dz[0])
cumsum = np.cumsum(np.insert(temp, 0, 0))
smoothed=(cumsum[N:] - cumsum[:-N])/N
return smoothed
def smoothMAconv(depth,temp, scale): # Moving average by numpy convolution
dz = np.diff(depth)
N = int(scale/dz[0])
smoothed=np.convolve(temp, np.ones((N,))/N, mode='valid')
return smoothed
然後我實現它:
scale = 5.
smooth = smoothMAconv(dep,data, scale)
但print len(dep), len(smooth)
回報81071 80572
,如果我使用其他功能相同的情況。 如何獲得與數據相同長度的平滑數組?
爲什麼它在小數據集上工作?即使我嘗試使用不同的比例尺(並且在示例和數據中使用相同的尺寸),但示例中的結果與原始數據的長度相同,但不在實際應用中。 我認爲nan
值的影響,但如果我在示例中有nan
,它沒有什麼區別。
那麼問題出在哪裏,如果可能的話沒有完整的數據集來判斷?
通過模擬數據(例如我的答案中的一個隨機數組),可以包括一個具有大尺寸數據集的可重現示例。 – FTP