簡體   English   中英

在 fortran90/95 或 Python 中的兩個大整數之間生成均勻隨機數

[英]Generating uniform random numbers between two large integers in fortran90/95 or Python

我想在 fortran90/95 或 Python 中的 [2E16, 5E20] 之間生成一些統一的隨機數。 我知道如果“R”是零和一之間的隨機數(0<R<1),我們可以將 R 轉換為 [A, B] 為:

R = (ba)*r + a。

但是當我使用這個算法在[2E16, 5E20]之間生成一些隨機數時,大多數生成的隨機數都非常接近5E20。 我知道為什么會發生這種情況,正因為如此,術語 BA 大約等於 B(因為 B 比 A 大得多),並且大多數生成的隨機數都放在 B 或 B/10 的大小范圍內(我的意思是它非常接近B)。

我怎么解決這個問題?

我嘗試應用的一種解決方案是,我將 [2E16, 5E20] 區間拆分為更小的區間,例如:

[2e16, 2e17], [2e17, 2e18], [2e18, 2e19], [2e19, 2e20], [2e20, 5e20]。

我在上述每個間隔之間生成了一些隨機數。

還有其他解決方案嗎? 我的解決方案正確嗎?

這不是一個編程問題,而是一個數學問題。

您需要考慮從哪個分布中提取隨機數。 任何跨越幾個數量級的 均勻分布總是會產生更多具有較大指數的數字而不是具有較小指數的數字。

如果您想要一個與每個指數產生相同數量的數字的分布,您應該考慮對數均勻分布,可以使用例如scipy.stats.loguniform對其進行采樣。

暫無
暫無

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

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