从C ++中的离散概率分布中抽样

时间:2012-03-30 23:34:24

标签: c++ boost probability sampling

我是C ++的新手,并且对缺乏可访问的常见概率操作工具(即Boost和标准库中缺少的东西)感到非常惊讶。我用其他语言做了很多科学编程,但标准和/或普遍存在的第三方附加组件总是包含各种概率工具。一位朋友称Boost是C ++的无处不在的附加组件,但是当我阅读Boost文档时,即使它似乎缺乏我认为极其简单的内置插件。

我找不到内置的,它采用某种离散概率数组,并根据这些概率产生一个索引。我当然可以为此编写自己的函数,但我只是想检查一下是否缺少标准的方法来执行此操作。

我觉得,必须在如此低级别编写自己的函数是一件坏事,但我正在为一个全部使用C ++的大型项目编写一个新的模拟模块。我通常的首选策略是用Python编写它并将Python链接到C ++,但是因为其他几个人在完成它之后将不得不管理这些代码,并且没有人知道Python,我认为它会更谨慎的是用C ++将它们传递给所有人。

更一般地说,人们在C ++中做什么样的事情,例如从标准分布中采样,特别是像多变量正态分布那样基本的东西?

5 个答案:

答案 0 :(得分:4)

也许我误解了你的意图,但在我看来你想要的只是std::discrete_distribution

答案 1 :(得分:3)

(移出评论。)

你看过Boost.Math.StatisticalDistributions了吗?具体来说,它是Discrete Probability Distributions

Boost不是一个库,它是库的集合,因此有时很难找到你正在寻找的东西 - 但这并不意味着它不存在。 ; - ]

答案 2 :(得分:2)

如上所述,您需要查看boost/math/distributions和朋友以满足您的需求。

这里是a very good, detailed tutorial on getting these working for you in Boost.你可能也想把你的重量放在stan之上,这在这个空间看起来很有希望。

答案 3 :(得分:0)

你应该做更少的C ++抨击,更多的问题 - 我们试图在SO上提供帮助和尊重。像你这样的问题经常被标记为煽动性。

Boost::math似乎提供了您正在寻找的内容:https://www.quantnet.com/cplusplus-statistical-distributions-boost/ - 我不是100%确定它处理多变量分布的程度(我也不是统计专家) )。

在此处获取:http://www.boost.org/doc/libs/1_49_0/libs/math/doc/html/index.html

答案 4 :(得分:0)

Boost的数学库非常适合处理不同的发行版,但如果您只对采样感兴趣(如您在帖子中提到的问题),那么查看boost Random库可能会更加密切相关你的任务。 This link显示了如何模拟滚动加权骰子。