我制作的代码计算了数组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
有没有更有效的方法来执行此操作而不是使用append和for循环?我不需要两个数组只是b
答案 0 :(得分:2)
实际上,你做了2d操作。如果添加了第二个维度(例如使用重新整形),则可以对第一个数组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 ]
<强>更新强>
当您在评论中提及指数平滑时,您可能会对pandas
或statsmodels
个软件包感兴趣来处理时间序列。有关指数平滑实现的一些有用链接,请参阅示例pandas文档,其中包含一些有用的computational tools和this ER问题跟踪器。