python - 有没有更有效的方法来枚举 python 或 R 中离散随机变量的每个可能结果的概率?

标签 python r numpy probability

我正在Python中理论上计算pmf。这是代码。

>>> a_coin = np.array([0,1])
>>> three_coins = np.array(np.meshgrid(a_coin,a_coin,a_coin)).T.reshape(-1,3)
>>> heads = np.sum(three_coins, axis = 1)
>>> df = pd.DataFrame({'heads': heads, 'prob': 1/8})
>>> np.array(df.groupby('heads').sum()['prob'])
array([0.125, 0.375, 0.375, 0.125])

这段代码模拟 1 次抛掷 3 个公平硬币。 可能的结果是{0,1,2,3}。 最后一行代码分别计算每个可能结果的概率。

如果我想计算 throw 10 个公平硬币的 pmf,我必须在 np.meshgrid(a_coin,...,a_coin) 中放入 10 个“a_coin”,这似乎很无聊且效率低下。

问题是,在 python 或 R 中是否有更有效的方法来做到这一点?

最佳答案

以下是在 R 中执行此操作的方法:

> sapply(0:3, choose, n=3)/sum(sapply(0:3, choose, n=3))
[1] 0.125 0.375 0.375 0.125

choose 函数为您提供二项式系数。要将它们转化为概率,只需除以它们的总和即可:

sapply(0:10, choose, n=10)
 [1]   1  10  45 120 210 252 210 120  45  10   1

sapply(0:10, choose, n=10)/ sum( sapply(0:10, choose, n=10))
 [1] 0.0009765625 0.0097656250 0.0439453125 0.1171875000 0.2050781250 0.2460937500 0.2050781250
 [8] 0.1171875000 0.0439453125 0.0097656250 0.0009765625

看起来您并不是真正想要枚举,而是想要计算。如果您需要枚举 10 次连续“公平”二项式抽奖的结果,那么您可以使用 combn 11 次。

关于python - 有没有更有效的方法来枚举 python 或 R 中离散随机变量的每个可能结果的概率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55134685/

相关文章:

根据 R 中的条件替换 NA

Python - 将字符串列表转换为 float - 方括号和小数点导致问题

python - Numpy:使用 2D 索引数组访问 2D 数组

python - 使用 PyGame 显示 Sci Py voronoi 边缘会产生奇怪的 "star"效果

python - Django CONN_MAX_AGE 选项不打开持久连接

从向量中删除连续值,但不迭代

r - Logistic 回归的模型拟合统计量

Python Pandas dataframe : For each month of the year, 如果月份不存在,则将月份最后一天的日期添加到索引中,或者删除重复项

python - 参数不会在 scikit-learn GridSearchCV 中自定义估计器

python - zsh:在 zsh 脚本中的heredoc之后转义换行符