Тот факт, что 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)
Но я также подумал о создании нового экземпляра при каждом вызове функции:
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)
A Третья альтернатива - передать rng в качестве аргумента при вызове функции. Таким образом, тот же rng может использоваться и в других частях кода.
Это используется в среде моделирования, которая будет часто вызываться для выборки, например, времен перехода.
Думаю, вопрос в том, есть ли аргументы в пользу любого из этих трех методов и существует ли какая-то практика?
Кроме того, очень интересны любые ссылки на более подробные объяснения использования этих генераторов случайных чисел (за исключением статьи NumPy do c и случайной выборки)!