np.random.randn(n)如果第二次執行,我對產生不同樣本的印象。
np.random.RandomState(n_clusters).randn(n)如果第二次執行會產生相同的樣本。這樣對嗎?還有,有什么np.random.seed()作用?
我的代碼:
np.random.RandomState(2).randn(2)
Out[6]: array([-0.41675785, -0.05626683])
np.random.RandomState(4).randn(2)
Out[7]: array([0.05056171, 0.49995133])
np.random.RandomState(42).randn(2)
Out[8]: array([ 0.49671415, -0.1382643 ])
np.random.RandomState(42).randn(2)
Out[9]: array([ 0.49671415, -0.1382643 ])
np.random.RandomState(4).randn(2)
Out[10]: array([0.05056171, 0.49995133])
np.random.RandomState(2).randn(2)
Out[11]: array([-0.41675785, -0.05626683])
np.random.randn(2)
Out[12]: array([ 0.47143516, -1.19097569])
np.random.randn(2)
Out[13]: array([ 1.43270697, -0.3126519 ])
uj5u.com熱心網友回復:
np.random使用偽亂數生成器(也稱為 PRNG)生成看起來隨機的數字序列。基本上它有一個內部“種子”編號,它應用一些函式來生成序列中的下一個數字。此函式然后更新內部種子,因此序列中的下一個數字可能會有所不同。
np.random.RandomState(2)創建一個新的 PRNG,其內部種子設定為2。此生成器將從固定序列中生成數字,這就是為什么每次呼叫 時np.random.RandomState(2).randn(2),您都會得到相同的 2 個數字。如果您改為保存該RandomState物件并不斷呼叫randn(2)它,您將獲得與另一個RandomState(2).
>>> rs1 = np.random.RandomState(2)
>>> rs2 = np.random.RandomState(2)
>>> rs1.randn(2), rs2.randn(2)
(array([-0.41675785, -0.05626683]), array([-0.41675785, -0.05626683]))
>>> rs1.randn(2), rs2.randn(2)
(array([-2.1361961 , 1.64027081]), array([-2.1361961 , 1.64027081]))
np.random.seed(2)會將種子設定為此 PRNG的全域實體為2. 通常,它會以行程開始時的時間戳作為種子,因此每次運行程式時都會獲得新的亂數。設定此種子將使您在呼叫諸如np.random.randn(2)使用全域 PRNG 之類的東西時獲得亂數的確定性序列。
>>> np.random.seed(2)
>>> np.random.randn(2)
array([-0.41675785, -0.05626683])
>>> np.random.randn(2)
array([-2.1361961 , 1.64027081])
uj5u.com熱心網友回復:
randn使用亂數生成器從標準正態分布回傳值。它使用特定于您呼叫此函式的物件的數學演算法,并且值取決于引擎的最后狀態。RandomState使用Mersenne Twister演算法回傳一個偽亂數生成器引擎,根據您傳遞的整數初始化其狀態。
你是對的,中的np.random.RandomState(n_clusters)部分np.random.RandomState(n_clusters).randn(n)首先創建了一個帶有種子的 prng 引擎n_clusters。初始狀態僅取決于種子,因此如果您稍后使用相同的種子創建引擎,它將處于相同的初始狀態,生成相同的亂數。然后該方法randn(n)使用底層的 Mersenne Twister 演算法從正態分布中生成 2 個亂數(內部它們是 32 位整數,總共生成 4 個,將它們轉化為值)。
prng引擎的初始狀態必須在開始時定義。您可以定義種子,或者如果您省略它,例如 in np.random.seed(),numpy 會根據時間或通過讀取磁盤的某些部分來為您定義它以生成初始隨機源。該函式np.random.seed定義了全域 prng 引擎的種子,與 相比np.random.RandomState,您可以在其中保存回傳值并稍后再次使用該引擎,
myprng = numpy.random.RandomState(2)
myprng.randn(10)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/369827.html
