【问题标题】:Is there an easier way to use scipy.stats.poisson than my current method?使用 scipy.stats.poisson 有没有比我目前的方法更简单的方法?
【发布时间】:2020-05-15 21:35:46
【问题描述】:

我使用 scipy.stats 来计算不同足球比赛中进球的泊松概率分布,但我不禁想到有一种更简单的方法。

假设我正在尝试计算总进球数少于 3 个的比赛作为最终结果的概率。目前我正在使用这样的东西(我的测试运行结果是正确的):

def under25(self, homeS, awayS):
        under25 = 100 * (((poisson.pmf(0, homeS) * poisson.pmf(0, awayS)) +
                         (poisson.pmf(1, homeS) * poisson.pmf(0, awayS)) +
                         (poisson.pmf(0, homeS) * poisson.pmf(1, awayS)) +
                         (poisson.pmf(1, homeS) * poisson.pmf(1, awayS)) +
                         (poisson.pmf(2, homeS) * poisson.pmf(0, awayS)) +
                         (poisson.pmf(0, homeS) * poisson.pmf(2, awayS))))
        return round(float(np.array2string(under25)), 5)

如果我将参数作为under25(2, 3) 传递,则输出为12.4652,这是正确的。

我已经尝试了scipy.stats.poisson 下的所有函数,但它们都返回 numpy 数组,我无法自己或在线弄清楚该怎么做。

除此之外还有更短的方法吗?

【问题讨论】:

    标签: python numpy scipy poisson


    【解决方案1】:

    您始终可以将值作为 numpy 数组传递:

    def fn(homeS,awayS):
        S = sum(poisson.pmf(np.array([0,1,0,1,2,0]),homeS)*poisson.pmf(np.array([0,0,1,1,0,2]),awayS))
        return round(float(np.array2string(100*S)), 5)
    
    fn(2,3)
    12.4652
    

    【讨论】:

    • 非常感谢!这正是我想要的。我早些时候尝试过,但使用 np.arange 但它没有用。你能解释一下这是如何工作的吗?
    • np.arange 可以,它必须是连续的,例如 np.arange(1,5,step=2) 或 np.arange(5,1,step=-2)。 np.array 将列表转换为数组,因此您可以在列表中使用它
    • 你可以做 poisson.pmf(np.arange(0,5,step=1),1) 例如,它会给你从 0 到 4.. 的概率 lambda 1
    • 谢谢。这可能会删除 50 行多余的代码:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2010-11-03
    • 2020-12-29
    • 2017-12-18
    • 2010-09-30
    • 2021-04-05
    相关资源
    最近更新 更多