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