Я пытаюсь сформировать распределение случайной величины. Где вероятность срабатывания реакции равна:
Prob (Rj срабатывает) = aj / a0
aj = функция склонности, которая описывает вероятность срабатывания отдельной реакции в заданный период времени.
a0 = сумма всех функций склонности для всех реакций в системе.
На данный момент у меня есть функция, которая возвращает массив функций склонности для каждой реакции в системе, которая выводит:
[32. 0. 0.]
Затем я использовал a0 = sum (склонность) к вычислить a0. за которой следует вторая функция:
def prob_rxn_fires(propensity, a0):
prob = propensity/a0
return prob
Для вычисления aj / a0 выход этой функции присваивается переменной: rxn_probability. В моей системе есть три реакции, и теперь я пытаюсь использовать scipy.stats.rv_discrete для выборки из дистрибутива.
У меня есть количество реакций в системе, хранящееся в массиве:
num_rxn = np.arange(1, rxn_probability.size + 1).reshape(rxn_probability.shape)
, форма и размер которого всегда соответствуют массиву rxn_probability.
Мой код на данный момент:
j = stats.rv_discrete(name="Reaction index", values=(num_rxn, rxn_probability)).rvs()
, но на выходе всегда 1, и я не уверен, правильно ли это, а если нет, то почему?
Ура