我试图形成一个随机变量的分布。当反应发生的概率是:
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,我不确定是否正确,如果不是,为什么不正确?
干杯
发布于 2020-05-05 12:31:08
IIUC有以下数组:
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)结合使用时,您基本上是在说,对于可能性,它应该选择num_rxn的第0元素。
现在,如果您尝试不同的值,假设是values=(num_rxn, [.8, .1, .1]),结果将是:
如果您想要一个统一的发行版,可以指定values=(num_rxn, [1/3] * num_rxn.size)。
https://stackoverflow.com/questions/61610900
复制相似问题