我编写了计算数组 y 的周期 p 中每个元素的平均值的代码
import numpy as np
p=4
y =np.asarray([146, 96, 59, 133, 192, 127, 79, 186, 272, 155, 98, 219])
c=len(y)/p
print c
a=[]
for i in range(1,c+1):
s=y[p*(i-1):p*i]/np.mean(y[p*(i-1):p*i])
a = np.append(a, s)
print a
b=[]
for i in range(c+1):
s = np.mean(a[i::p])
b = np.append(b, s)
print b
有没有比使用追加和 for 循环更有效的方法来做到这一点?我不需要两个数组,只需 b
事实上,你做了一个2d操作。如果添加了第二个维度(例如使用 reshape),则可以计算第一个数组 a:
z = y.reshape(-1, p)
w = z/z.mean(axis=1).reshape(-1,1)
print w.flatten()
# [ 1.34562212 0.88479263 0.5437788 1.22580645 1.31506849 0.86986301
# 0.54109589 1.2739726 1.46236559 0.83333333 0.52688172 1.17741935]
你的第二个,b
,是先前结果的平均值:
print w.mean(axis=0)
# [ 1.37435207, 0.86266299, 0.53725214, 1.2257328 ]
Update
当您在评论中提到指数平滑时,您可能会对pandas https://github.com/pydata/pandas/ or statsmodels https://github.com/statsmodels/statsmodels处理时间序列的包。例如,请参阅 pandas 文档,其中包含一些有用的内容计算工具 http://pandas.pydata.org/pandas-docs/dev/computation.html#exponentially-weighted-moment-functions and this ER https://github.com/pydata/pandas/issues/2143在问题跟踪器中获取有关指数平滑实现的一些有用链接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)