pd.rolling_mean
,
ndarrays
pd.rolling_mean(x, window=2, center=False)
FutureWarning:对于ndarrays,不推荐使用pd.rolling_mean,将来的版本将删除
但根据this SO answer,这似乎是最快的方法。
现在有没有直接使用SciPy或NumPy执行此操作的新方法,其速度与pd.rolling_mean
一样快?
答案 0 :(得分:9)
编辑 - 不幸的是,看起来新的方式不是那么快:
新版熊猫:
In [1]: x = np.random.uniform(size=100)
In [2]: %timeit pd.rolling_mean(x, window=2)
1000 loops, best of 3: 240 µs per loop
In [3]: %timeit pd.Series(x).rolling(window=2).mean()
1000 loops, best of 3: 226 µs per loop
In [4]: pd.__version__
Out[4]: '0.18.0'
旧版本:
In [1]: x = np.random.uniform(size=100)
In [2]: %timeit pd.rolling_mean(x,window=2)
100000 loops, best of 3: 12.4 µs per loop
In [3]: pd.__version__
Out[3]: u'0.17.1'
答案 1 :(得分:4)
看起来新的方法是通过DataFrame.rolling
课程上的方法(我想你的意思是把它想象成groupby
):
http://pandas.pydata.org/pandas-docs/version/0.18.0/whatsnew.html
e.g。
x.rolling(window=2).mean()
答案 2 :(得分:1)
试试这个
x.rolling(window=2, center=False).mean()
答案 3 :(得分:0)
我建议scipy.ndimage.filters.uniform_filter1d就像我answer中的链接问题一样。对于大型阵列来说,它也更快:
import numpy as np
from scipy.ndimage.filters import uniform_filter1d
N = 1000
x = np.random.random(100000)
%timeit pd.rolling_mean(x, window=N)
__main__:257: FutureWarning: pd.rolling_mean is deprecated for ndarrays and will be removed in a future version
The slowest run took 84.55 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 7.37 ms per loop
%timeit uniform_filter1d(x, size=N)
10000 loops, best of 3: 190 µs per loop
答案 4 :(得分:-2)
如果您的尺寸是同质的,您可以尝试实现用于二维图像的Summed Area Table的n维形式:
求和区域表是一种数据结构和算法,用于快速有效地生成网格矩形子集中的值之和。
然后,按此顺序,您可以:
不幸的是,我不知道这是否有效,但在给定的前提下,它应该是。