2012-03-30 48 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顯示瞭如何模擬滾動加權模具。