簡體   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