首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么rv_discrete总是返回1

为什么rv_discrete总是返回1
EN

Stack Overflow用户
提问于 2020-05-05 10:24:19
回答 1查看 29关注 0票数 0

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

Prob(Rj火灾)= aj/a0

aj =一个倾向函数,它描述了单个反应在给定时间内发生的概率。

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

目前,我有一个函数,为系统中的每个反应返回一个倾向函数数组,该函数输出:

代码语言:javascript
复制
[32.  0.  0.]

然后我使用a0 =sum(倾向)来计算a0。然后是第二个函数:

代码语言:javascript
复制
def prob_rxn_fires(propensity, a0):
    prob = propensity/a0   
    return prob

为了计算aj/a0,这个函数的输出被赋值给变量: rxn_probability。在我的系统中有三个反应,我现在正在尝试使用scipy.stats.rv_discrete从发行版中取样。

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

代码语言:javascript
复制
num_rxn = np.arange(1, rxn_probability.size + 1).reshape(rxn_probability.shape)

它是形状和大小的,所以它总是与rxn_probability数组匹配。

我现在的代码是:

代码语言:javascript
复制
j = stats.rv_discrete(name="Reaction index", values=(num_rxn, rxn_probability)).rvs()

但是输出总是1,我不确定是否正确,如果不是,为什么不正确?

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 12:31:08

IIUC有以下数组:

代码语言:javascript
复制
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_discretevalues=(num_rxn, rxn_probability)结合使用时,您基本上是在说,对于可能性,它应该选择num_rxn的第0元素。

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

  • 1具有概率.8
  • 2和概率.1
  • 3具有概率.1

如果您想要一个统一的发行版,可以指定values=(num_rxn, [1/3] * num_rxn.size)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61610900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档