Spec-Zone.ru › NumPy 1.17

Генераторы бит

Случайные значения, производимые Generator, происходят из BitGenerator. BitGenerators напрямую не предоставляют случайные числа и содержат только методы, используемые для инициализации, получения или изменения состояния, перехода или продвижения состояния, а также для доступа к низкоуровневым обёрткам для использования кодом, который может эффективно получать доступ к предоставляемым функциям, например, numba.

Поддерживаемые генераторы бит

Включенные генераторы бит:

  • PCG-64 - По умолчанию. Быстрый генератор, поддерживающий множество параллельных потоков и может быть продвинут на произвольное количество шагов. См. документацию для advance. PCG-64 имеет период 2^{128}. См. страницу автора PCG здесь для получения дополнительной информации об этом классе ПГСЧ.
  • MT19937 - Стандартный генератор бит Python. Добавляет функцию jumped, которая возвращает новый генератор с состоянием, как если бы 2^{128} были сделаны замеры.
  • Philox - Генератор, основанный на счетчике, способный к произвольному продвижению на количество шагов или генерации независимых потоков. См. страницу Random123 для получения дополнительной информации об этом классе генераторов бит.
  • SFC64 - Быстрый генератор, основанный на случайных обратимых отображениях. Обычно самый быстрый генератор из четырёх. См. страницу автора SFC здесь (небольшое) описание деталей.
  • BitGenerator
  • MT19937
  • PCG64
  • Philox
  • SFC64

Инициализация и энтропия

BitGenerator обеспечивает поток случайных значений. Для генерации воспроизводимых потоков BitGenerators поддерживают установку начального состояния через seed. Все предоставляемые BitGenerators принимают произвольное целое неотрицательное число или список таких чисел в качестве seed. BitGenerators должны принимать эти входные данные и обрабатывать их в качественное внутреннее состояние для BitGenerator. Все BitGenerators в numpy делегируют эту задачу SeedSequence, который использует хэширование для обеспечения того, что даже низкокачественные seed генерируют высококачественные начальные состояния.

from numpy.random import PCG64

bg = PCG64(12345678903141592653589793)

SeedSequence разработан для удобного использования лучших практик. Рекомендуется, чтобы стохастическая программа по умолчанию использовала энтропию из операционной системы, чтобы каждый запуск был разным. Программа должна выводить или регистрировать эту энтропию. Для воспроизведения предыдущего значения программа должна позволять пользователю указать это значение через какой-либо механизм, часто используется аргумент командной строки, чтобы пользователь мог повторно ввести эту энтропию для воспроизведения результата. SeedSequence может справиться со всем, кроме общения с пользователем, что зависит от вас.

from numpy.random import PCG64, SeedSequence

# Get the user's seed somehow, maybe through `argparse`.
# If the user did not provide a seed, it should return `None`.
seed = get_user_seed()
ss = SeedSequence(seed)
print('seed = {}'.format(ss.entropy))
bg = PCG64(ss)

По умолчанию используется 128-битное целое число с использованием энтропии, собранной из операционной системы. Это хорошее количество энтропии для инициализации всех генераторов, которые есть в numpy. Не рекомендуется использовать маленькие seed меньше 32 бит для общего использования. Использование только небольшого набора seed для инициализации больших пространств состояния означает, что некоторые начальные состояния невозможно достичь. Это создаёт некоторые смещения, если все используют такие значения.

В результатах не будет ничего неправильного, так сказать; даже seed 0 идеально подходит благодаря обработке, которую выполняет SeedSequence. Если вам нужно какое-то фиксированное значение для тестов на единицу или отладки, используйте любой seed, который вам нравится. Но если вы хотите сделать выводы из результатов или опубликовать их, использование большего набора seed - хорошая практика.

Если вам нужно сгенерировать хороший seed «офлайн», тогда SeedSequence().entropy или используя secrets.randbits(128) из стандартной библиотеки - оба удобные способа.

SeedSequence([entropy, spawn_key, pool_size]) SeedSequence смешивает источники энтропии воспроизводимым способом для установки начального состояния независимых и, очень вероятно, неперекрывающихся BitGenerators.
bit_generator.ISeedSequence Абстрактный базовый класс для последовательностей seed.
bit_generator.ISpawnableSeedSequence Абстрактный базовый класс для последовательностей seed, которые могут порождать.
bit_generator.SeedlessSeedSequence Последовательность seed для BitGenerators без необходимости состояния seed.

© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/random/bit_generators/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API