scipy.stats.qmc.

QMCEngine#

класс scipy.stats.qmc.QMCEngine(d, *, оптимизация=None, rng=None, seed=None)[источник]#

Универсальный класс квази-Монте-Карло сэмплера, предназначенный для наследования.

QMCEngine является базовым классом для создания конкретного квази-Монте-Карло сэмплера. Не может использоваться напрямую как сэмплер.

Параметры:
dint

Размерность пространства параметров.

оптимизация{None, "random-cd", "lloyd"}, опционально

Использовать ли схему оптимизации для улучшения качества после выборки. Обратите внимание, что это постобработка, которая не гарантирует сохранение всех свойств выборки. По умолчанию None.

  • random-cd: случайные перестановки координат для уменьшения центрированной несоответствия. Лучшая выборка на основе центрированной несоответствия постоянно обновляется. Выборка на основе центрированной несоответствия демонстрирует лучшую устойчивость заполнения пространства для 2D и 3D подпроекций по сравнению с использованием других мер несоответствия.

  • lloyd: Возмущение выборок с использованием модифицированного алгоритма Ллойда-Макса. Процесс сходится к равноотстоящим выборкам.

Добавлено в версии 1.10.0.

rngnumpy.random.Generator, опционально

Состояние генератора псевдослучайных чисел. Когда rng равно None, новый numpy.random.Generator создаётся с использованием энтропии из операционной системы. Типы, отличные от numpy.random.Generator передаются в numpy.random.default_rng для создания экземпляра Generator.

Изменено в версии 1.15.0: В рамках SPEC-007 переход от использования numpy.random.RandomState to numpy.random.Generator, этот ключевое слово было изменено с seed to rng. В течение переходного периода оба ключевых слова будут продолжать работать, хотя можно указать только одно за раз. После переходного периода вызовы функций с использованием seed ключевое слово будет выдавать предупреждения. После периода устаревания, seed ключевое слово будет удалено.

Методы

fast_forward(n)

Быстрая перемотка последовательности на n позиции.

integers(l_bounds, *[, u_bounds, n, ...])

Генерировать n целые числа от l_bounds (включительно) до u_bounds (исключительно), или если endpoint=True, l_bounds (включительно) до u_bounds (включительно).

random([n, workers])

Генерировать n в полуоткрытом интервале [0, 1).

reset()

Сбросить движок в базовое состояние.

Примечания

По соглашению выборки распределены по полуоткрытому интервалу [0, 1)Экземпляры класса могут обращаться к атрибутам: d для размерности; и rng для генератора случайных чисел.

Создание подклассов

При наследовании QMCEngine для создания нового сэмплера, __init__ и random должно быть переопределено.

  • __init__(d, rng=None): по крайней мере, исправить размерность. Если сэмплер не использует преимущества rng (детерминированные методы, такие как Halton), этот параметр можно опустить.

  • _random(n, *, workers=1): draw n от движка. workers используется для параллелизма. См. Halton например.

Опционально, два других метода могут быть переопределены подклассами:

  • reset: Сбросить движок в исходное состояние.

  • fast_forward: Если последовательность детерминирована (как последовательность Холтона), то fast_forward(n) пропускает n первый розыгрыш.

Примеры

Чтобы создать случайный сэмплер на основе np.random.random, мы бы сделали следующее:

>>> from scipy.stats import qmc
>>> class RandomEngine(qmc.QMCEngine):
...     def __init__(self, d, rng=None):
...         super().__init__(d=d, rng=rng)
...
...
...     def _random(self, n=1, *, workers=1):
...         return self.rng.random((n, self.d))
...
...
...     def reset(self):
...         super().__init__(d=self.d, rng=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]])