首页 > 解决方案 > 你知道改变循环以获得更高效的方法吗?

问题描述

我希望以一种更简单、更高效的方式来处理条件循环。任何人都可以想到一种方法吗?预先感谢您的帮助!!:)

OptVariableControle =np.array([])    
    j = 1
    for i in range (0,27):
        if  i == 2 :
            j = j+1
        if  i == 5:
            j = j+1
        if  i == 8:
            j = j+1
        if  i == 11:
            j = j+1
        if  i == 14:
            j = j+1
        if  i == 17:
            j = j+1
        if  i == 20:
            j = j+1
        if  i == 23:
            j = j+1
        OptVariableControle =np.append(OptVariableControle, 
                        (optionsActualise[i] + betas["beta" + str(j)]* (optionsActualise[i]-esperences[i])))

你好,我几乎不可能把我所有的代码都放在这里。但我可以确认 betas 是一个包含 10 个(1 到 10)个元素的字典,optionsActualise 和 esperances 是 np.array 的形状(27,)。

Finaly使它与它一起工作:

betas_arr1 = np.array([betas[f'beta{j}'] for j in range(0, 9)])
OptVariableControle =np.array([])    


OptVariableControle = optionsActualise + betas_arr1[np.arange(0, 27) // 3] * (optionsActualise - esperences)

我希望这已经足够了

标签: pythonpython-3.xnumpyfor-loopif-statement

解决方案


您可以使用模数 (%)运算符。当您检查i一个数字时,如果它是真的,您想增加j1。这里有一个模式,您检查的数字在除以 3 时给出 2 的余数,这是您如何实现此模式逻辑以进行检查更简单、高效且紧凑:

OptVariableControle =np.array([])    
    j = 1
    # Replaced 27 by 26 here, as you do not want j to change when i is 26
    for i in range (0,26):
        if  i %3 == 2 :
            j = j+1

        OptVariableControle =np.append(OptVariableControle, 
                        (optionsActualise[i] + betas["beta" + str(j)]* (optionsActualise[i]-esperences[i])))

推荐阅读