2012-03-30 231 views
2

我是C++的新手,对缺乏可访问的常见概率操纵工具(即Boost和标准库中缺少的东西)感到非常惊讶。我用其他语言编写了很多科学编程,但标准和/或无所不在的第三方附加组件始终包含一整套概率工具。一位朋友认为Boost是C++的无处不在的附加组件,但是当我阅读Boost文档时,即使它看起来缺乏我认为非常基本的内置插件。从C++中的离散概率分布中抽样

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

不得不在低级别编写我自己的函数是一件坏事,我觉得,但是我正在为一个大型项目编写一个全新的模拟模块,这个模块全部用C++编写。我惯常的做法是用Python编写并将Python链接到C++,但是由于其他人在完成后将不得不管理这些代码,而且他们都不知道Python,我认为它会以更加谨慎的态度将其交给C++的所有人。

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

+0

总是有http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Distributions.html。如果你不想要一个更大的包,只需要自己写10条线就可以从直方图中抽样。 – 2012-03-30 23:38:54

+0

@honk我很欣赏这个链接。但是,我遇到了太多的科学计划,努力编写自己的基本统计函数。我认为这会让事情变得更糟。是的,制定统一标准并将其与累计概率进行比较很容易,但我认为对于大多数项目来说,这是一个糟糕的主意,就像我很少信任选择实施Cholesky分解的人的科学代码一样而不是使用LAPACK或他们自己的线性求解器。 – ely 2012-03-30 23:47:01

回答

3

(从评论移动)

你看Boost.Math.StatisticalDistributions?具体而言,其Discrete Probability Distributions

加速是不是图书馆,这是图书馆的收藏,所以有时很难找到你正在寻找什么–但是,这并不意味着它不存在。 ; - ]

+0

@ ildjarn - 谢谢,不,我没有。这很奇怪,因为我决定永远不要问这样的通用问题,而不要先做至少30分钟的谷歌搜索,而且我没有在搜索中看到任何这样的子库。我猜其他东西会通过找到合适的子库来解决。谢谢。 – ely 2012-03-30 23:41:14

+0

链接已死: http://www.boost.org/doc/libs/1_57_0/libs/math/doc/html/dist.html http://www.boost.org/doc/libs/1_57_0 /libs/math/doc/html/math_toolkit/stat_tut/dist_params.html – 2014-12-10 10:45:31

+0

@TobiasMadsen:谢谢,现在修复。 – ildjarn 2014-12-10 16:04:12

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

+0

这不是一个打算的bash。我喜欢C++,因为我正在学习它,并且我看到了低级别内存控制和面向对象的优点。我只是指出我的惊讶,这更多的是我的无知,而不是其他任何事情的功能。 – ely 2012-03-30 23:42:23

3

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

+0

是的,这似乎是解决问题的最流畅的解决方案。 30分钟的Google搜索“C++标准离散分布样本”这样的事情没有受到影响?哦,我仍然不会尝试Bing :) – ely 2012-03-30 23:54:29

+0

是的,它有时候会像C++一样,很有趣。我曾经花了几个小时(或者几小时的时间)寻找'std :: array'!我知道这里有这样一个班,但是我没有想到它会有最明显的名字。 – leftaroundabout 2012-03-31 00:16:14

0

Boost的数学库对于处理不同的发行版非常有用,但是如果你只对抽样感兴趣(就像在你的帖子中提到的问题一样),然后看看提升图书馆可能与你的任务更密切。例如,This link显示了如何模拟滚动加权模具。