【问题标题】:Why does Scipy rv_discrete always return 1为什么 Scipy rv_discrete 总是返回 1
【发布时间】:2020-08-19 23:33:18
【问题描述】:

我正在尝试形成一个随机变量的分布。其中反应触发的概率为:

概率(Rj 着火)= aj/a0

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

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

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

[32.  0.  0.]

然后我使用 a0 = sum(propensity) 来计算 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,我不确定这是否正确,如果不是,为什么它不正确?

干杯

【问题讨论】:

    标签: python arrays scipy statistics


    【解决方案1】:

    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_discretevalues=(num_rxn, rxn_probability) 时,您基本上是在说概率为 1 它应该选择 num_rxn 的第 0 个元素。

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

    • 1 概率为 0.8
    • 2 概率为 0.1
    • 3 概率为 0.1

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

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多