當我在茱莉亞使用正常數字時,我在數據模擬中注意到了數據中的一種模式。i.d.d如何相關?在茱莉亞的正常數字
我有一個隨機矩陣的系綜。爲了使我的計算可重現,我設置了每個實現的srand
函數。也就是說,每次我使用函數randn(n,n)
我用srand(j)
初始化它,其中j
是實現的數量。
我想知道正常數字是如何生成的,如果它具有做我所做的意義,我會引入意外相關性。
當我在茱莉亞使用正常數字時,我在數據模擬中注意到了數據中的一種模式。i.d.d如何相關?在茱莉亞的正常數字
我有一個隨機矩陣的系綜。爲了使我的計算可重現,我設置了每個實現的srand
函數。也就是說,每次我使用函數randn(n,n)
我用srand(j)
初始化它,其中j
是實現的數量。
我想知道正常數字是如何生成的,如果它具有做我所做的意義,我會引入意外相關性。
理想情況下,沒有。如果您有任何反例,請將它們作爲Julia issue tracker上的錯誤提交。 Julia使用最先進的Mersenne Twister圖書館,dSFMT。這個庫非常快,並且被認爲是使用僞隨機數生成的最佳實踐。然而,最近有一些關於MT的PRNG可能存在微妙的統計問題 - 特別是在使用小的連續種子值時。爲了緩解這個,如果你真的很擔心潛在關係,你可以做這樣的事情:
julia> using SHA
julia> srand(reinterpret(UInt32,sha256(string(1))))
MersenneTwister(UInt32[0x73b2866b,0xe1fc34ff,0x4e806b9d,0x573f5aff,0xeaa4ad47,0x491d2fa2,0xdd521ec0,0x4b5b87b7],Base.dSFMT.DSFMT_state(Int32[660235548,1072895699,-1083634456,1073365654,-576407846,1073066249,1877594582,1072764549,-1511149919,1073191776 … -710638738,1073480641,-1040936331,1072742443,103117571,389938639,-499807753,414063872,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382)
julia> srand(reinterpret(UInt32,sha256(string(2))))
MersenneTwister(UInt32[0x3a5e73d4,0xee165e26,0x71593fe0,0x035d9b8b,0xd8079c01,0x901fc5b6,0x6e663ada,0x35ab13ec],Base.dSFMT.DSFMT_state(Int32[-1908998566,1072999344,-843508968,1073279250,-1560550261,1073676797,1247353488,1073400397,1888738837,1073180516 … -450365168,1073182597,1421589101,1073360711,670806122,388309585,890220451,386049800,382,0]),[1.5382,1.36616,1.06752,1.17428,1.93809,1.63529,1.74182,1.30015,1.54163,1.05408 … 1.67649,1.66725,1.62193,1.26964,1.37521,1.42057,1.79071,1.17269,1.37336,1.99576],382)
換句話說,哈希使用強密碼散列像SHA2-256小整數種子值的字符串表示,並使用生成的哈希數據來播種Mersenne Twister狀態。 Ottoboni,Rivest & Stark建議爲每個隨機數生成一個強大的加密哈希,但這將是一個巨大的減速(在當前的硬件上),可能是過度殺毒,除非你有一個應用程序對非完全統計隨機性非常敏感。
我也許應該指出,由於後向兼容性的考慮,Julia在這裏的行爲並不比其他語言糟糕,其中一些默認情況下會使用更差的隨機數生成器。這是一個最近的研究成果(甚至還沒有發表)。我建議的技術也可以用來緩解其他語言中的這個問題。
讓我與我的顧問討論您的答案,因爲我正在攻讀博士學位,因此我們正在繪製尚未發佈的新成果,並擔心在公共場所發佈新的潛在新創意。如果需要,是否有機會親自與您聯繫? – user2820579
此外,它使用Ziggurat算法(https://en.wikipedia.org/wiki/Ziggurat_algorithm)從統一編號生成正態變量 –
當然,請隨時直接與我聯繫。 – StefanKarpinski