2013-04-25 35 views
3

我們有一個非常簡單的程序(單線程),我們在這裏做一堆隨機樣本生成。爲此,我們使用numpy隨機函數(如normalrandom_sample)的幾個調用。有時一次隨機調用的結果決定了調用另一個隨機函數的次數。Python numpy - 隨機數的重複性

現在我想在s.th開頭設置一個種子。我的程序多次運行應該產生相同的結果。爲此,我使用numpyRandomState的實例。雖然一開始就是這種情況,但在某些時候結果會變得不同,這就是我想知道的原因。

當我正確地做所有事情時,沒有併發性,從而線性調用函數,並且沒有其他隨機數生成器參與,爲什麼它不起作用?

+10

向我們顯示* code *!沒有一個可以證明你的問題的最小例子,我們就不太可能有用! – Bakuriu 2013-04-25 17:07:35

+2

你做得不正確。知道numpy PRNGs是好的。如果您希望我們相信您,請提供種子PRNG然後在不同運行時發出不同輸出的程序。否則,它沒有發生。 – 2013-04-25 20:20:48

回答

4

好吧,大衛是對的。 numpy中的PRNG正常工作。在我創建的每一個小例子中,他們都按照他們應有的方式工作。

我的問題是一個不同的,但最後我解決了它。不要在確定性算法中循環字典。似乎Python在調用.item()函數獲取迭代器時會任意排序這些項目。

所以我並不是很失望,這是這種錯誤,因爲它是一個有用的提醒,當試圖做可重複的模擬時想什麼。

-1

如果再現性對您非常重要,我不確定我是否完全相信任何PRNG總會在給定相同種子的情況下生成相同的輸出。您可以考慮在一個階段捕獲隨機數,並將其保存以供重用;然後在第二階段,重播你捕獲的隨機數。這是消除非重複性可能性的唯一方法 - 它也解決了您當前的問題。

+1

如果一個PRNG不會爲相同的種子生成相同的輸出,則會被破壞。 – 2013-04-25 20:19:29

+1

對,但實際上可能會被打破。或者它不能在操作系統之間一致地移植。或者它可能在Python 3中有不同的結果。或或或。我的觀點是如果重複性很重要,您可以通過記錄和回放的方式來保證它的重複性。 – 2013-04-26 02:53:49

+1

PRNG被認爲是很好的,並且沒有人認爲這是單一Python版本的單一機器。 – 2013-04-26 06:04:14