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
\()将引擎重置为基本状态。