【问题标题】:Python - For Loop ( two parallel iterations)Python - For 循环(两个并行迭代)
【发布时间】:2018-12-06 21:15:46
【问题描述】:

我正在研究原型的估计模块。目的是向预测器模块发送适当的季节性变化参数。

最初,在预订曲线估计中,我们使用了一年中季节性的公式 - 具有 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

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

      最近更新 更多