有效地与numpy迭代

时间:2014-01-01 19:12:12

标签: python numpy iteration

我制作的代码计算了数组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

1 个答案:

答案 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 ]

<强>更新

当您在评论中提及指数平滑时,您可能会对pandasstatsmodels个软件包感兴趣来处理时间序列。有关指数平滑实现的一些有用链接,请参阅示例pandas文档,其中包含一些有用的computational toolsthis ER问题跟踪器。

相关问题