[英]How to use the new NumPy random number generator?
NumPy 現在建議新代碼使用defacult_rng()
實例而不是numpy.random
的事實讓我思考如何使用它來產生良好的結果,無論是性能還是統計。
第一個例子是我最初想寫的:
import numpy as np
class fancy_name():
def __init__(self):
self.rg = np.random.default_rng()
self.gamma_shape = 1.0
self.gamma_scale = 1.0
def public_method(self, input):
# Do intelligent stuff with input
return self.rg.gamma(self.gamma_shape, slef.gamma_scale)
但我也考慮過在每個 function 調用中創建一個新實例:
import numpy as np
class fancy_name():
def __init__(self):
self.gamma_shape = 1.0
self.gamma_scale = 1.0
def public_method(self, input):
# Do intelligent stuff with input
rg = np.random.default_rng()
return rg.gamma(self.gamma_shape, slef.gamma_scale)
第三種選擇是將 rng 作為參數傳遞給 function 調用。 這樣,相同的 rng 也可以用於代碼的其他部分。
這用於模擬環境中,該環境將經常被調用來采樣,例如,轉換時間。
我想問題是這三種方法中是否有 arguments 以及是否存在某種實踐?
此外,對使用這些隨機數生成器的更深入解釋的任何參考(NumPy 文檔和隨機采樣文章除外)都非常有趣!
default_rng()
不是 singleton。 它創建了一個由默認 BitGenerator class 的新實例支持的新生成器。 引用文檔:
使用默認的 BitGenerator (PCG64) 構造一個新的生成器。
...
如果種子不是 BitGenerator 或 Generator,則實例化一個新的 BitGenerator。 此 function 不管理默認全局實例。
這也可以通過經驗進行測試:
In [1]: import numpy
In [2]: numpy.random.default_rng() is numpy.random.default_rng()
Out[2]: False
這是昂貴的。 您通常應該在程序中調用一次default_rng()
並將生成器傳遞給任何需要它的東西。 (是的,這很尷尬。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.