Python 为什么Scipy rv_离散始终返回1

Python 为什么Scipy rv_离散始终返回1,python,arrays,scipy,statistics,Python,Arrays,Scipy,Statistics,我试图形成一个随机变量的分布。其中反应发生的概率为: 探针(Rj火焰)=aj/a0 aj=倾向函数,描述给定时间段内单个反应发生的概率 a0=系统中所有反应的所有倾向函数之和 现在我有一个函数,它返回系统中每个反应的倾向函数数组,它输出: [32. 0. 0.] 然后我用a0=总和(倾向)来计算a0。然后是第二个函数: def prob_rxn_火灾(倾向性,a0): prob=倾向性/a0 返回问题 为了计算aj/a0,将此函数的输出分配给变量:rxn_概率。 在我的系统中有三种反应,

我试图形成一个随机变量的分布。其中反应发生的概率为:

探针(Rj火焰)=aj/a0

aj=倾向函数,描述给定时间段内单个反应发生的概率

a0=系统中所有反应的所有倾向函数之和

现在我有一个函数,它返回系统中每个反应的倾向函数数组,它输出:

[32.  0.  0.]
然后我用a0=总和(倾向)来计算a0。然后是第二个函数:

def prob_rxn_火灾(倾向性,a0):
prob=倾向性/a0
返回问题
为了计算aj/a0,将此函数的输出分配给变量:rxn_概率。 在我的系统中有三种反应,我现在尝试使用scipy.stats.rv_离散从分布中采样

我将系统中的反应数存储在数组中:

num_rxn = np.arange(1, rxn_probability.size + 1).reshape(rxn_probability.shape)
它的形状和大小总是与rxn_概率数组相匹配

我现在的代码是:

j = stats.rv_discrete(name="Reaction index", values=(num_rxn, rxn_probability)).rvs()
但是输出总是1,我不确定这是否正确,如果不正确,为什么不正确


干杯!您有以下阵列:

将numpy导入为np
rxn_概率=np.数组([1,0,0])
num_rxn=np.arange(1,rxn_probability.size+1)。重塑(rxn_probability.shape)
num_rxn
数组([1,2,3])
因此,当使用
rv_discrete
值=(num_rxn,rxn_probability)
时,您基本上是说,对于probability one,它应该选择
num_rxn
的第0个元素

现在,如果您尝试不同的值,让我们假设
values=(num_rxn,[.8,.1,.1])
结果将是:

  • 1有可能
  • 2有可能
  • 3.有可能

如果想要均匀分布,可以指定
值=(num_rxn,[1/3]*num_rxn.size)

IIUC您有以下数组:

将numpy导入为np
rxn_概率=np.数组([1,0,0])
num_rxn=np.arange(1,rxn_probability.size+1)。重塑(rxn_probability.shape)
num_rxn
数组([1,2,3])
因此,当使用
rv_discrete
值=(num_rxn,rxn_probability)
时,您基本上是说,对于probability one,它应该选择
num_rxn
的第0个元素

现在,如果您尝试不同的值,让我们假设
values=(num_rxn,[.8,.1,.1])
结果将是:

  • 1有可能
  • 2有可能
  • 3.有可能
如果想要均匀分布,可以指定
值=(num_rxn,[1/3]*num_rxn.size)