索引器错误:列表索引超出了创建变量结构库的范围

2024-10-01 05:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在尝试建立一个不同组合的模型结构库。结构库基于5个变量,我需要5个模型。i-e modelsOne,modelsTwo等等,最多5个。为了简单起见,我将代码粘贴成束,这对所有五个模型都是一样的。它几乎没有什么变化。 当我执行代码时,我得到以下错误

modelOne = modelsOne[temp1]

IndexError: list index out of range

def ModelsProduct(modelsOne, modelsTwo, modelsThree, modelsFour,modelsFive):


    modelsStepOne = list(product("+-",repeat = 4))
    modelsStepThree = [('a','a'),('a','b'),('a','c'),('a','d'),('a','e'),('b','b'),('b','c'),('b','d'),('b','e'),('c','c'),('c','d'),('c','e')]
    modelsStepFour = [('d','d'),('d','e')]
    modelsStepFive = [('e','e')]



    #produce modelsOne
    modelsStepTwo = [('d',),('e',)]
    for one in modelsStepOne:
        for two in modelsStepTwo:
            for three in modelsStepThree:
                for four in modelsStepFour:
                    for five in modelsStepFive:
                        modelsOne.append(one+two+three+four+five)

    #produce modelsTwo
    modelsStepTwo = [('c',),('d',)]
    for one in modelsStepOne:
        for two in modelsStepTwo:
            .
            .
            .
   return modelsOne, modelsTwo, modelsThree, modelsFour, modelsFive


modelsOne, modelsTwo,modelsThree, modelsFour,modelsFive = ModelsProduct(modelsOne, modelsTwo, modelsThree, modelsFour, modelsFive)

VarList = ["a","b","c","d","e"]
initial_condi = [10, 15, 5,4,5]

dictVar = {'a':0, 'b': 1, 'c': 2, 'd': 3, 'e':4}
ops = { "+": operator.add, "-": operator.sub }
t_range = arange(0.0,60.0,1.0)


def odeFunc(Y, t, x,dictVar):

    if x[-5] == 3072:
        temp1 = 3071
    else:
        temp1 = int(x[-5])

    if x[-4] == 3072:
        temp2 = 3071
    else:
        temp2 = int(x[-4])


    if x[-3] == 3072:
        temp3 = 3071
    else:
        temp3 = int(x[-3])

    if x[-2] == 3072:
        temp4 = 3071
    else:
        temp4 = int(x[-2])

    if x[-1] == 3072:
        temp5 = 3071
    else:
        temp5 = int(x[-1])

    modelOne = modelsOne[temp1]
    modelTwo = modelsTwo[temp2]
    modelThree = modelsThree[temp3]
    modelFour = modelsFour[temp4]
    modelFive = modelsFive[temp5]
    return GenModel(Y, x, modelOne,modelTwo,modelThree,modelFour,modelFive, dictVar)

def GenModel(Y,x,modelOne,modelTwo,modelThree,modelFour,modelFive, dictVar):
    dydt = zeros_like(Y)

    dydt[0] = ops[modelOne[0]](dydt[0],x[0]*Y[0])#  k1 x1
    dydt[0] = ops[modelOne[1]](dydt[0],x[1]*Y[dictVar[modelOne[-5]]])# k2 x2
    dydt[0] = ops[modelOne[2]](dydt[0],x[2]*Y[dictVar[modelOne[-4]]])# k3 x3
    dydt[0] = ops[modelOne[3]](dydt[0],x[3]*Y[dictVar[modelOne[-3]]])# k4 x4
    dydt[0] = ops[modelOne[4]](dydt[0],x[4]*Y[dictVar[modelOne[-2]]]*Y[dictVar[modelOne[-1]]])#k5 x5 x6
    dydt[0] = ops[modelOne[5]](dydt[0],x[5])# k6

    dydt[1] = ops[modelTwo[0]](dydt[1],x[6]*Y[0])
    dydt[1] = ops[modelTwo[1]](dydt[1],x[7]*Y[dictVar[modelTwo[-5]]])
    dydt[1] = ops[modelTwo[2]](dydt[1],x[8]*Y[dictVar[modelTwo[-4]]])
    dydt[1] = ops[modelTwo[3]](dydt[1],x[9]*Y[dictVar[modelTwo[-3]]])
    dydt[1] = ops[modelTwo[4]](dydt[1],x[10]*Y[dictVar[modelTwo[-2]]]*Y[dictVar[modelTwo[-1]]])
    dydt[1] = ops[modelTwo[5]](dydt[1],x[11])
.
.
.
.   return dydt

Tags: inforifelseopsintdydtdictvar
1条回答
网友
1楼 · 发布于 2024-10-01 05:03:14

在您的代码中,以下列表的长度是16

list(product("+-",repeat = 4))

但是,看起来temp1是 temp1 = 3071

所以,当你接受 modelOne = modelsOne[temp1] 所以,这可能是导致错误的原因

相关问题 更多 >