我是C++的新手,对缺乏可访问的常见概率操纵工具(即Boost和标准库中缺少的东西)感到非常惊讶。我用其他语言编写了很多科学编程,但标准和/或无所不在的第三方附加组件始终包含一整套概率工具。一位朋友认为Boost是C++的无处不在的附加组件,但是当我阅读Boost文档时,即使它看起来缺乏我认为非常基本的内置插件。从C++中的离散概率分布中抽样
我无法找到一个内置的,它需要某种离散概率数组,并产生一个根据这些概率选择的索引。我当然可以为此编写自己的函数,但我只是想检查我是否缺少一个标准的方法来执行此操作。
不得不在低级别编写我自己的函数是一件坏事,我觉得,但是我正在为一个大型项目编写一个全新的模拟模块,这个模块全部用C++编写。我惯常的做法是用Python编写并将Python链接到C++,但是由于其他人在完成后将不得不管理这些代码,而且他们都不知道Python,我认为它会以更加谨慎的态度将其交给C++的所有人。
更一般地说,人们在C++中做些什么,比如从标准分布抽样,特别是像多变量正态分布一样基本的东西?
总是有http://www.gnu.org/software/gsl/manual/html_node/Random-Number-Distributions.html。如果你不想要一个更大的包,只需要自己写10条线就可以从直方图中抽样。 – 2012-03-30 23:38:54
@honk我很欣赏这个链接。但是,我遇到了太多的科学计划,努力编写自己的基本统计函数。我认为这会让事情变得更糟。是的,制定统一标准并将其与累计概率进行比较很容易,但我认为对于大多数项目来说,这是一个糟糕的主意,就像我很少信任选择实施Cholesky分解的人的科学代码一样而不是使用LAPACK或他们自己的线性求解器。 – ely 2012-03-30 23:47:01