scipy.stats.qmc.QMCEngine

class scipy.stats.qmc.QMCEngine(d, *, seed=None)[源代码]

用于子类化的泛型准蒙特卡罗采样器类。

QMCEngine是构造特定准蒙特卡罗采样器的基类。它不能直接用作取样器。

参数
d集成

参数空间的维度。

seed :{无,整型, numpy.random.Generator },可选{无,整型,

如果 seed 是不是没有 numpy.random.Generator 使用的是Singleton。如果 seed 是一个整型、一个新的 Generator 实例,其种子设定为 seed 。如果 seed 已经是一个 Generator 实例,则使用该实例。

注意事项

按照惯例,样本分布在半开区间内 [0, 1) 。类的实例可以访问属性: d 用于该尺寸;以及 rng 对于随机数生成器(用于 seed )。

Subclassing

当子类化时 QMCEngine to create a new sampler, _ _init__``和 ``random 必须重新定义。

  • __init__(d, seed=None) :至少固定尺寸。如果采样器没有利用 seed (像Halton这样的确定性方法),则可以省略此参数。

  • random(n) :绘制 n 并增加计数器 num_generated 通过 n

或者,子类可以覆盖另外两个方法:

  • reset :将发动机重置到其原始状态。

  • fast_forward :如果序列是确定性的(如Halton序列),则 fast_forward(n) 正在跳过 n 第一次抽签。

示例

要基于以下内容创建随机采样器,请执行以下操作 np.random.random ,我们会做以下工作:

>>> from scipy.stats import qmc
>>> class RandomEngine(qmc.QMCEngine):
...     def __init__(self, d, seed=None):
...         super().__init__(d=d, seed=seed)
...
...
...     def random(self, n=1):
...         self.num_generated += n
...         return self.rng.random((n, self.d))
...
...
...     def reset(self):
...         super().__init__(d=self.d, seed=self.rng_seed)
...         return self
...
...
...     def fast_forward(self, n):
...         self.random(n)
...         return self

在子类化之后 QMCEngine 要定义我们想要使用的采样策略,我们可以创建一个从中进行采样的实例。

>>> engine = RandomEngine(2)
>>> engine.random(5)
array([[0.22733602, 0.31675834],  # random
       [0.79736546, 0.67625467],
       [0.39110955, 0.33281393],
       [0.59830875, 0.18673419],
       [0.67275604, 0.94180287]])

我们还可以重置发电机的状态并重新采样。

>>> _ = engine.reset()
>>> engine.random(5)
array([[0.22733602, 0.31675834],  # random
       [0.79736546, 0.67625467],
       [0.39110955, 0.33281393],
       [0.59830875, 0.18673419],
       [0.67275604, 0.94180287]])

方法:

fast_forward \(n)

通过以下方式快进序列 n 位置。

random \([n] )

n 在半开间隔内 [0, 1)

reset \()

将引擎重置为基本状态。