我是C ++的新手,并且对缺乏可访问的常见概率操作工具(即Boost和标准库中缺少的东西)感到非常惊讶。我用其他语言做了很多科学编程,但标准和/或普遍存在的第三方附加组件总是包含各种概率工具。一位朋友称Boost是C ++的无处不在的附加组件,但是当我阅读Boost文档时,即使它似乎缺乏我认为极其简单的内置插件。
我找不到内置的,它采用某种离散概率数组,并根据这些概率产生一个索引。我当然可以为此编写自己的函数,但我只是想检查一下是否缺少标准的方法来执行此操作。
我觉得,必须在如此低级别编写自己的函数是一件坏事,但我正在为一个全部使用C ++的大型项目编写一个新的模拟模块。我通常的首选策略是用Python编写它并将Python链接到C ++,但是因为其他几个人在完成它之后将不得不管理这些代码,并且没有人知道Python,我认为它会更谨慎的是用C ++将它们传递给所有人。
更一般地说,人们在C ++中做什么样的事情,例如从标准分布中采样,特别是像多变量正态分布那样基本的东西?
答案 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)