QMCEngine#
- class scipy.stats.qmc.QMCEngine(d, *, optimization=None, seed=None)[源代码][源代码]#
一个通用的准蒙特卡罗采样器类,用于子类化。
QMCEngine 是一个用于构建特定准蒙特卡罗采样器的基类。它不能直接用作采样器。
- 参数:
- d整数
参数空间的维度。
- 优化{None, “random-cd”, “lloyd”}, 可选
是否使用优化方案来提高采样后的质量。请注意,这是一个后处理步骤,不保证样本的所有属性都将被保留。默认值为 None。
random-cd
: 坐标随机排列以降低中心差异。基于中心差异的最佳样本不断更新。与使用其他差异度量相比,基于中心差异的采样在2D和3D子投影方面表现出更好的空间填充鲁棒性。lloyd
: 使用改进的Lloyd-Max算法扰动样本。该过程收敛于等间距的样本。
Added in version 1.10.0.
- 种子 : {None, int,
numpy.random.Generator
}, 可选{None, int,} 如果 seed 是 int 或 None,将使用
np.random.default_rng(seed)
创建一个新的numpy.random.Generator
。如果 seed 已经是Generator
实例,则使用提供的实例。
方法
fast_forward
(n)将序列快进 n 个位置。
integers
(l_bounds, *[, u_bounds, n, ...])从 l_bounds`(包含)到 `u_bounds`(不包含)之间抽取 `n 个整数,或者如果 endpoint=True,则从 `l_bounds`(包含)到 `u_bounds`(包含)之间抽取。
random
([n, workers])在半开区间
[0, 1)
中绘制 n。reset
()将引擎重置为基础状态。
注释
按照惯例,样本分布在半开区间
[0, 1)
上。类的实例可以访问以下属性:d
表示维度;rng
表示随机数生成器(用于seed
)。子类化
在创建新采样器时,通过子类化
QMCEngine
,必须重新定义__init__
和random
。__init__(d, seed=None)
: 至少修复维度。如果采样器不利用 ``seed``(如 Halton 这样的确定性方法),则可以省略此参数。_random(n, *, workers=1)
: 从引擎中抽取n
。workers
用于并行处理。参见Halton
示例。
可选地,子类可以重写另外两种方法:
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, *, workers=1): ... 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]])