IndexError: список индексов вне диапазона для создания библиотеки с переменной структурой - PullRequest
0 голосов
/ 23 мая 2018

Привет. Я пытаюсь создать библиотеку структуры модели с различными комбинациями.Структура библиотеки основана на 5 переменных, для которых мне нужно пять моделей.то есть модели одно, модели два и так до пяти.Для простоты я вставляю код в группы, который одинаков для всех пяти моделей.В нем очень мало изменений.Когда я выполняю код, я получаю следующую ошибку

modelOne = modelsOne [temp1]

IndexError: индекс списка вне диапазона

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

1 Ответ

0 голосов
/ 23 мая 2018

В вашем коде длина следующего списка равна 16

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

, но, похоже, что temp1 равен temp1 = 3071

, поэтому при доступе к modelOne = modelsOne[temp1] этоможет быть причиной ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...