Python-For循环(两个并行迭代)

时间:2018-12-06 21:15:46

标签: python-3.x numpy for-loop

我正在研究原型的估算模块。目的是将适当的季节性变化参数发送到预报器模块。

最初,在预定曲线估计中,我们使用的是一年中某一天的季节性公式-具有5个订单的三角函数(固定)。它是这样的:

doy_seasonality = np.exp(z[0]*np.sin(2*np.pi*doy/365.)+z[1]*np.cos(2*np.pi*doy/365.)
                       +z[2]*np.sin(4*np.pi*doy/365.)+ z[3]*np.cos(4*np.pi*doy/365.)
                       +z[4]*np.sin(6*np.pi*doy/365.)+ z[5]*np.cos(6*np.pi*doy/365.)
                       +z[6]*np.sin(8*np.pi*doy/365.)+ z[7]*np.cos(8*np.pi*doy/365.)
                       + z[8]*np.sin(10*np.*pi*doy/365.)+ z[9]*np.cos(10*np.pi*doy/365.))

即我们有5个固定订单[2, 4, 6, 8, 10]

现在,我们已经找到了一种通过快速傅立叶变换获取订单的更好方法。根据我们在模拟中用作输入的估计键,订单数组可以具有不同数量的值。

例如,假设订单数组如下

orders = [2, 6, 10, 24]

对应于每个阶值,将有两个z值(这是一个三角参数-SIN部分为一个值,COS部分为一个值)。例如,它可能看起来像这样

z = [0.08 0.11 0.25 0.01 0.66 0.19 0.45 0.07]

要实现这一点,我需要定义一个带有两个并行迭代的for循环:

z[0] to z[2*length(orders)-1]      i.e. `z[0] to z[7]`

orders[0] to orders[length(orders)-1] i.e. orders[0] to orders[3]

最后,该公式应计算以下内容:

doy_seasonality = np.exp(z[0]*np.sin(orders[0]*np.pi*doy/365.)+z[1]*np.cos(orders[0]*np.pi*doy/365.)
                       +z[2]*np.sin(orders[1]*np.pi*doy/365.)+ z[3]*np.cos(orders[1]*np.pi*doy/365.)
                       +z[4]*np.sin(orders[2]*np.pi*doy/365.)+ z[5]*np.cos(orders[2]*np.pi*doy/365.)
                       +z[6]*np.sin(orders[3]*np.pi*doy/365.)+ z[7]*np.cos(orders[3]*np.pi*doy/365.))

我无法为此设计适当的语法。

doy(一年中的一天)是一个等距分布的向量:1、2、3 ... 364、365

1 个答案:

答案 0 :(得分:1)

orders = np.array([2, 6, 10, 24])
z = np.array([0.08, 0.11, 0.25, 0.01, 0.66, 0.19, 0.45, 0.07])
doy = np.arange(365) + 1

s = 0
for k in range(len(orders)):
    s += z[2 * k    ] * np.sin(orders[k] * np.pi * doy / 365.)
    s += z[2 * k + 1] * np.cos(orders[k] * np.pi * doy / 365.) 
s = np.exp(s)