Skip to main content
 首页 » 编程设计

python之运行或滑动中位数、均值和标准差

2025年05月04日36zhoujg

我正在尝试计算大型数组的运行中位数、均值和标准差。我知道如何计算运行平均值如下:

def running_mean(x, N): 
    cumsum = np.cumsum(np.insert(x, 0, 0)) 
    return (cumsum[N:] - cumsum[:-N]) / float(N) 

这非常有效。但是我不太明白为什么 (cumsum[N:] - cumsum[:-N])/float(N) 可以给出平均值(我从别人那里借来的)。

我试图添加另一个返回语句来计算中位数,但它没有达到我想要的效果。

return (cumsum[N:] - cumsum[:-N]) / float(N), np.median(cumsum[N:] - cumsum[:-N]) 

有没有人给我一些提示来解决这个问题?非常感谢。

张华年

请您参考如下方法:

cumsum 技巧专门用于查找 sum 或 average 值,不要认为您可以简单地扩展它以获得 中位数 和std 值。在 1D 数组上的滑动/运行窗口中执行通用 ufunc 操作的一种方法是创建一系列基于 1D 滑动窗口的索引,这些索引堆叠为 2D 数组然后沿堆叠轴应用 ufunc。要获取这些索引,您可以使用 broadcasting .

因此,为了执行运行平均值,它看起来像这样 -

idx = np.arange(N) + np.arange(len(x)-N+1)[:,None] 
out = np.mean(x[idx],axis=1) 

要运行median 和std,只需替换np.mean与 np.median和 np.std分别。