Параллельный конгруэнтный генератор (64-битный, PCG64)
-
class numpy.random.pcg64.PCG64(seed_seq=None) -
BitGenerator для псевдослучайного генератора чисел PCG-64.
Параметры: -
seed : {None, int, array_like[ints], ISeedSequence}, optional -
Зародыш для инициализации
BitGenerator. Если None, то свежая, непредсказуемая энтропия будет взята из операционной системы. Если переданоintилиarray_like[ints], то оно будет передано вSeedSequence, чтобы вывести начальное состояниеBitGenerator. Также можно передать реализацию интерфейсаISeedSequence, например,SeedSequence.
Примечания
PCG-64 — это 128-битная реализация генератора перестановки конгруэнтного генератора O’Neill ([1], [2]). PCG-64 имеет период
и поддерживает продвижение на произвольное количество шагов, а также
потоки. Конкретный член семейства PCG, который мы используем, — это PCG XSL RR 128/64, как описано в статье ([2]).
PCG64предоставляет капсулу, содержащую указатели функций, которые производят числа с плавающей точкой двойной точности и целые числа без знака 32 и 64 бита. Они не могут быть непосредственно использованы в Python и должны быть использованы объектомGeneratorили аналогичным объектом, который поддерживает низкоуровневый доступ.Поддерживает метод
advanceдля продвижения RNG на произвольное число шагов. Состояние PCG-64 RNG представлено 2 128-битными целыми числами без знака.Состояние и зародыши
Вектор состояния
PCG64состоит из 2 значений целых чисел без знака по 128 бит, которые внешне представлены целыми числами Python. Одно — состояние PRNG, которое продвигает линейный конгруэнтный генератор (LCG). Второе — фиксированное нечётное приращение, используемое в LCG.Входной зародыш обрабатывается
SeedSequenceдля генерации обоих значений. Приращение не может быть установлено независимо.Параллельные функции
Предпочтительный способ использования BitGenerator в параллельных приложениях — использование метода
SeedSequence.spawnдля получения значений энтропии и использования этих значений для генерации новых BitGenerators:>>> from numpy.random import Generator, PCG64, SeedSequence >>> sg = SeedSequence(1234) >>> rg = [Generator(PCG64(s)) for s in sg.spawn(10)]
Гарантия совместимости
PCG64гарантирует, что фиксированный зародыш всегда будет производить один и тот же поток случайных целых чисел.Ссылки
[1] “PCG, Семья лучших генераторов случайных чисел” [2] (1, 2) O’Neill, Melissa E. “PCG: Семья простых быстрых алгоритмов с эффективным использованием пространства для генерации случайных чисел” -
Состояние
state | Получить или установить состояние PRNG |
Параллельная генерация
advance(delta) | Продвинуть базовую RNG так, как будто произошло delta вычислений. |
jumped([jumps]) | Возвращает новый генератор битов с пропущенным состоянием. |
Расширение
cffi | Интерфейс CFFI |
ctypes | Интерфейс ctypes |
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/random/bit_generators/pcg64.html