簡體   English   中英

Jython隨機模塊為cpython產生不同的結果

[英]Jython random module produces different results to cpython

我正在使用已知的隨機種子生成一些測試數據。 我想從cpython和jython中使用這些數據。 我發現如果使用jython(2.5.2)和cpython,數據會有所不同。

將其歸結為一個簡單的測試,我可以看到PRNG在兩個實現中給出了不同的結果:

在Jython中:

Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06) 
[Java HotSpot(TM) Server VM (Sun Microsystems Inc.)] on java1.6.0_26
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> random.seed(1)
>>> random.random()
0.7308781974052877

在CPython中:

Python 2.7.2+ (default, Oct  4 2011, 20:03:08) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> random.seed(1)
>>> random.random()
0.13436424411240122

我正在生成的測試數據在每個python實現中都是可重現的。 有沒有解決的辦法? 也許我需要編寫自己的PRNG代碼?

有一種解決方法。 兩種實現都包括純蟒蛇“WichmannHill”PRNG。 它的速度較慢,但​​它在Jython和CPython中都給出了相同的結果。

在我的代碼中我替換了

random.seed(1)
uuid += random.choice(hexdigits)

rand = random.WichmannHill(1)
uuid += rand.choice(hexdigits)

正如delnan在評論中所說:不同的python解釋器產生不同的隨機序列並不奇怪。 官方文檔是指算法的C實現。 其他Python實現可以選擇其他算法。 實際上,最小公分母可能是所產生的隨機序列的分布。

如果您依賴於可以在所有Python解釋器中重現的偽隨機序列,則必須編寫自己的偽隨機數生成器。 線性反饋移位寄存器可能是一個良好的開端並且相對容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM