簡體   English   中英

如何使用新的 NumPy 隨機數發生器?

[英]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.

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