Расчет склонности функции в python - PullRequest
1 голос
/ 25 апреля 2020

Я пытаюсь вычислить функции склонности в python, используя уравнение: функция склонности = stoch_rate * произведение бинома (xi, si), где xi - число дискретных молекул конкретного реагента в реакции, а si это соотношение между реагентами в каждом уравнении, оба хранятся в матрицах.

popul_num = np.matrix([100, 200, 0, 0])
LHS = np.matrix([[1,1,0,0], [0,0,1,0], [0,0,1,0]]) --> three rows for 3 different reactions, each row has 4 elements describing the ratio of reactants in that particular reaction
stoch_rate = np.matrix([0.0016, 0.0001, 0.1000]) --> rates for each of the three reactions above

В моей системе 4 объекта; Фермент, субстрат, фермент-субстратный комплекс и продукт. Которые описаны в матрицах popul_num и LHS в этом порядке.

Я написал следующий код для перебора элементов матриц, вычисления биномиальных коэффициентов для каждого реагента (на основе количества молекул в popul_num и соотношения в LHS), а затем умножения на константы скорости для генерации функция склонности.

for j in LHS:
aj = stoch_rate
for i in popul_num: 
    if np.any(i >= LHS[i,j]):
        # ^^^IndexError --> index 100 is out of bounds for axis 0 with size 3^^^
        aj = list(aj*binom(i, LHS[i, j]))             
    else: 
        aj == 0 
        break
print(aj)

Подразумевается, что оператор if проверяет, достаточно ли количество дискретных молекул в popul_num достаточно, чтобы позволить реакции происходить в соответствии со стехиометрией / крысами ios в LHS.

Я получаю сообщение об ошибке индекса: index 100 is out of bounds for axis 0 with size 3

Я знаю, что индексирование начинается с нуля, и я пытался найти несколько решений, но не смотрел!

Любая помощь будет высоко ценится

Приветствия

1 Ответ

0 голосов
/ 25 апреля 2020

Вы ссылаетесь на значения вместо индексов в ваших циклах for. Исправленный код:

def stoch():
    popul_num = np.matrix([100, 200, 0, 0])
    LHS = np.matrix([[1,1,0,0], [0,0,1,0], [0,0,1,0]]) #--> three rows for 3 different reactions, each row has 4 elements describing the ratio of reactants in that particular reaction
    stoch_rate = np.matrix([0.0016, 0.0001, 0.1000]) #--> rates for each of the three reactions above

    for j in range(len(LHS)):
        aj = stoch_rate
        for i in range(len(popul_num)):
            if np.any(i >= LHS[i,j]):
                aj = list(aj*binom(i, LHS[i, j]))             
        else: 
            aj == 0 
            break
    print(aj)

Вывод:

>>> stoch()
[[ 0.0016  0.0001  0.1   ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...