Python 使用numpy高效迭代

Python 使用numpy高效迭代,python,numpy,iteration,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

我编写了一段代码,用于计算数组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

事实上,您需要执行2d操作。如果添加了第二个尺寸标注(例如,使用“重塑”),则可以对第一个数组a求值:

你的第二个,
b
,是先前结果的平均值:

print w.mean(axis=0)
# [ 1.37435207,  0.86266299,  0.53725214,  1.2257328 ]
更新


当您在评论中提到指数平滑时,您可能会对处理timeseries的文件或包感兴趣。例如,有关指数平滑实现的一些有用链接,请参阅带有一些有用和问题跟踪程序的文档。

要摆脱附加,请使用np.zero(shape)分配两个整数数组,然后分配给相关索引,您应该会看到性能提升。还有,这个脚本的最终目标是什么?这可能有助于我们帮助您……当您迭代模p:
a[i::p]
时,第二个范围也应该在
范围(p)
中。我更新了答案,最后一个结果等于您预期的b,但长了一项,因为c=3但p=4。@MadisonMay添加Holt Winters指数平滑,用于计算seasons@user3084006请参见我的网站中的更新answer@alko这就是我正在做的。但对于Statsmodel来说。我得到了所有的双和单与所有的乘法模型和阻尼变化了。我会在完成三重预测和预测带后提交。我根据计算方法并使用数据,但似乎我得到了S的错误数字(季节指数的前4个数字)或者adorio research的计算方法可能是错误的,如果y有一个余数,那么can是强制它在整形函数中工作以执行if语句的最佳方法,然后
w=z[:len(y)%p*-1]。整形(-1,p)
print w.mean(axis=0)
# [ 1.37435207,  0.86266299,  0.53725214,  1.2257328 ]