Hua*_*ang 1 python numpy mean median
我试图计算一个大数组的运行中位数,平均值和标准.我知道如何计算运行平均值如下:
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N]) / float(N)
Run Code Online (Sandbox Code Playgroud)
这非常有效.但我不太明白为什么(cumsum[N:] - cumsum[:-N]) / float(N)可以给出平均值(我从其他人那里借来的).
我试图添加另一个返回句来计算中位数,但它没有做我想要的.
return (cumsum[N:] - cumsum[:-N]) / float(N), np.median(cumsum[N:] - cumsum[:-N])
Run Code Online (Sandbox Code Playgroud)
有没有人提供一些提示来解决这个问题?非常感谢你.
张焕安
这个cumsum技巧特定于查找sum或average值,并且不认为您可以简单地扩展它以获取median 和std值.ufunc在1D阵列上的滑动/运行窗口中执行通用操作的一种方法是创建一系列基于1D滑动窗口的索引,其堆叠为2D阵列,然后ufunc沿着堆叠轴应用.要获得这些索引,您可以使用broadcasting.
因此,为了执行运行平均值,它看起来像这样 -
idx = np.arange(N) + np.arange(len(x)-N+1)[:,None]
out = np.mean(x[idx],axis=1)
Run Code Online (Sandbox Code Playgroud)
对于运行median和std,只需更换np.mean与np.median和np.std分别.