Почему Scipy rv_discrete всегда возвращает 1 - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь сформировать распределение случайной величины. Где вероятность срабатывания реакции равна:

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, и я не уверен, правильно ли это, а если нет, то почему?

Ура

1 Ответ

2 голосов
/ 05 мая 2020

IIU C у вас есть следующие массивы:

import numpy as np

rxn_probability = np.array([1, 0, 0])

num_rxn = np.arange(1, rxn_probability.size + 1).reshape(rxn_probability.shape)
num_rxn 
array([1, 2, 3])

Поэтому при использовании rv_discrete с values=(num_rxn, rxn_probability) вы в основном говорите, что с вероятностью один он должен выбрать 0-й элемент num_rxn.

Теперь, если вы попробуете разные значения, скажем, values=(num_rxn, [.8, .1, .1]), результат будет:

  • 1 с вероятностью .8
  • 2 с вероятностью. 1
  • 3 с вероятностью .1

Если вы хотите равномерное распределение, вы можете указать values=(num_rxn, [1/3] * num_rxn.size).

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