繁体   English   中英

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

[英]Sampling from a discrete probability distribution in C++

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

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

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

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

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

(从评论中移开。)

你看过Boost.Math.StatisticalDistributions吗? 具体来说,它的离散概率分布

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

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

这是一个非常好的详细教程,介绍如何在Boost中为您提供这些功能。 你可能也想把重量放在stan身上,这在这个领域看起来很有希望。

你应该做更少的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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM