Генератор псевдослучайных чисел Мерсенна Твистер (MT19937)
-
class numpy.random.MT19937(seed=None) -
Контейнер для генератора псевдослучайных чисел Мерсенна Твистер.
- Параметры
-
-
seed{None, int, array_like[ints], SeedSequence}, optional -
Зерно для инициализации
BitGenerator. Если None, то свежая, непредсказуемая энтропия будет взята из ОС. Если передаетсяintилиarray_like[ints], то он будет передан вSeedSequenceдля вывода начального состоянияBitGenerator. Также можно передать экземплярSeedSequence.
-
Примечания
MT19937предоставляет капсулу, содержащую указатели на функции, которые производят двойные и беззнаковые 32- и 64-битные целые числа [1]. Их нельзя напрямую использовать в Python, и их необходимо использовать с объектомGeneratorили подобным объектом, который поддерживает низкоуровневый доступ.Модуль Python stdlib “random” также содержит генератор псевдослучайных чисел Мерсенна Твистер.
Состояние и Инициализация
Вектор состояния
MT19937состоит из массива из 624 элементов 32-битных беззнаковых целых чисел плюс одного целого числа между 0 и 624, которое индексирует текущую позицию в основном массиве.Входное зерно обрабатывается
SeedSequenceдля заполнения всего состояния. Первый элемент сбрасывается таким образом, что устанавливается только его наиболее значимый бит.Параллельная Генерация
Предпочтительный способ использования BitGenerator в параллельных приложениях — использование метода
SeedSequence.spawnдля получения значений энтропии и использование этих значений для генерации новых BitGenerator:>>> from numpy.random import Generator, MT19937, SeedSequence >>> sg = SeedSequence(1234) >>> rg = [Generator(MT19937(s)) for s in sg.spawn(10)]
Другой метод — использование
MT19937.jumped, которое продвигает состояние так, как будто сгенерированослучайных чисел ([1], [2]). Это позволяет разбить исходную последовательность, чтобы отдельные сегменты могли использоваться в каждом процессе-рабочем потоке. Все генераторы должны быть объединены, чтобы гарантировать, что сегменты берутся из одной и той же последовательности.
>>> from numpy.random import Generator, MT19937, SeedSequence >>> sg = SeedSequence(1234) >>> bit_generator = MT19937(sg) >>> rg = [] >>> for _ in range(10): ... rg.append(Generator(bit_generator)) ... # Chain the BitGenerators ... bit_generator = bit_generator.jumped()
Гарантия Совместимости
MT19937гарантирует, что фиксированное зерно всегда будет генерировать одну и ту же последовательность случайных целых чисел.Ссылки
-
1(1,2) -
Хироси Харамато, Макото Мацумото и Пьер Л’Экюер, «Быстрый алгоритм скачка вперед для линейных рекурсий в полиномиальном пространстве», Последовательности и их приложения — SETA, 290–298, 2008.
-
2 -
Хироси Харамато, Макото Мацумото, Такую Нисимура, Франсуа Паннеттон, Пьер Л’Экюер, «Эффективный скачок вперед для генераторов случайных чисел F2-линейных», ЖУРНАЛ INFORMS ПО ВЫЧИСЛЕНИЯМ, т. 20, № 3, лето 2008 г., стр. 385–390.
- Атрибуты
-
- lock: threading.Lock
-
Экземпляр блокировки, который используется совместно, чтобы один и тот же генератор битов мог использоваться в нескольких генераторах без повреждения состояния. Код, генерирующий значения из генератора битов, должен удерживать блокировку генератора битов.
Состояние
Получить или установить состояние PRNG |
Параллельная генерация
| Возвращает новый генератор битов со сдвинутым состоянием |
Расширение
Интерфейс CFFI | |
Интерфейс ctypes |
© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/random/bit_generators/mt19937.html