Spec-Zone.ru › NumPy 2.0

Случайная выборка (numpy.random)

Быстрый старт

Модуль numpy.random реализует генераторы псевдослучайных чисел (ГПСЧ) с возможностью извлечения выборок из различных распределений вероятностей. В общем случае, пользователи создадут экземпляр Generator с помощью default_rng и будут вызывать различные методы на нём для получения выборок из разных распределений.

>>> import numpy as np
>>> rng = np.random.default_rng()
# Generate one random float uniformly distributed over the range [0, 1)
>>> rng.random()  
0.06369197489564249  # may vary
# Generate an array of 10 numbers according to a unit Gaussian distribution.
>>> rng.standard_normal(10)  
array([-0.31018314, -1.8922078 , -0.3628523 , -0.63526532,  0.43181166,  # may vary
        0.51640373,  1.25693945,  0.07779185,  0.84090247, -2.13406828])
# Generate an array of 5 integers uniformly over the range [0, 10).
>>> rng.integers(low=0, high=10, size=5)  
array([8, 7, 6, 2, 0])  # may vary

Наши ГПСЧ представляют собой детерминированные последовательности и могут быть воспроизведены путём указания целого числа-семени для получения начального состояния. По умолчанию, при отсутствии семени, default_rng инициализирует ГПСЧ с недетерминированными данными из операционной системы, поэтому каждый раз будут генерироваться разные числа. Последовательности псевдослучайных чисел будут независимыми практически во всех случаях, по крайней мере, в тех случаях, для которых наша псевдослучайность была хорошей изначально.

>>> rng1 = np.random.default_rng()
>>> rng1.random()  
0.6596288841243357  # may vary
>>> rng2 = np.random.default_rng()
>>> rng2.random()  
0.11885628817151628  # may vary

Предупреждение

Генераторы псевдослучайных чисел, реализованные в этом модуле, предназначены для статистического моделирования и симуляции. Они не подходят для использования в целях безопасности или криптографии. Для таких случаев обратитесь к модулю secrets из стандартной библиотеки.

Семена должны быть большими положительными целыми числами. default_rng может принимать положительные целые числа любого размера. Мы рекомендуем использовать очень большие и уникальные числа, чтобы гарантировать, что ваше семя отличается от семян других пользователей. Это хорошая практика, чтобы убедиться, что ваши результаты статистически независимы от их результатов, если только вы намеренно не пытаетесь воспроизвести их результат. Удобный способ получить такое семя — использовать secrets.randbits для получения произвольного 128-битного целого числа.

>>> import secrets
>>> import numpy as np
>>> secrets.randbits(128)  
122807528840384100672342137672332424406  # may vary
>>> rng1 = np.random.default_rng(122807528840384100672342137672332424406)
>>> rng1.random()
0.5363922081269535
>>> rng2 = np.random.default_rng(122807528840384100672342137672332424406)
>>> rng2.random()
0.5363922081269535

См. документацию по default_rng и SeedSequence для более продвинутых вариантов управления семенем в специализированных сценариях.

Generator и связанная с ним инфраструктура были введены в NumPy версии 1.17.0. До сих пор много кода использует устаревший RandomState и функции в numpy.random. Хотя в настоящее время нет планов по их удалению, мы рекомендуем переходить к Generator по мере возможности. Алгоритмы быстрее, гибче и получат больше улучшений в будущем. В большинстве случаев, Generator может использоваться в качестве замены для RandomState. См. Устаревшее генерирование случайных чисел для информации об устаревшей инфраструктуре, Что нового или отличается для информации о переходе и NEP 19 для некоторых обоснований перехода.

Архитектура

Пользователи в основном взаимодействуют с экземплярами Generator. Каждый экземпляр Generator владеет экземпляром BitGenerator, который реализует основной алгоритм ГПСЧ. У BitGenerator ограниченный набор обязанностей. Он управляет состоянием и предоставляет функции для выдачи случайных чисел с плавающей точкой и случайных значений без знака 32 и 64 бит.

Экземпляр Generator принимает поток, предоставляемый генератором битов, и преобразует их в более полезные распределения, например, симулированные нормальные случайные значения. Эта структура позволяет использовать альтернативные генераторы битов с небольшим дублированием кода.

NumPy реализует несколько различных классов BitGenerator, которые реализуют различные алгоритмы ГПСЧ. default_rng в настоящее время использует PCG64 в качестве стандартного BitGenerator. Он обладает лучшими статистическими свойствами и производительностью по сравнению с алгоритмом MT19937, используемым в устаревшем RandomState. См. Генераторы битов для получения дополнительной информации о поддерживаемых BitGenerators.

default_rng и BitGenerators делегируют преобразование семян в состояния ГПСЧ SeedSequence внутри. SeedSequence реализует сложный алгоритм, который выступает в качестве посредника между входными данными пользователя и внутренними реализационными подробностями каждого алгоритма BitGenerator, каждый из которых может требовать различного количества бит для своего состояния. Важно, что он позволяет использовать целые числа произвольной длины и произвольные последовательности таких целых чисел для объединения их в состояние ГПСЧ. Это полезный примитив для построения гибкой схемы для потоков параллельного ГПСЧ.

Для обеспечения обратной совместимости мы все ещё поддерживаем устаревший класс RandomState. По умолчанию он продолжает использовать алгоритм MT19937, а старые семена по-прежнему воспроизводят те же результаты. Удобные Функции в numpy.random всё ещё являются псевдонимами методов для одного глобального экземпляра RandomState. См. Устаревшее генерирование случайных чисел для получения полной информации. См. Что нового или отличается для подробного сравнения между Generator и RandomState.

Параллельное генерирование

Включенные генераторы могут быть использованы в параллельных, распределённых приложениях различными способами:

  • Генерация SeedSequence
  • Последовательность целых семян
  • Независимые потоки
  • Переход в состояние BitGenerator

Пользователи с очень большим количеством параллелизма захотят обратиться к Обновлению PCG64 с PCG64DXSM.

Концепции

  • Генератор случайных Generator
  • Устаревший генератор (RandomState)
  • Генераторы битов
  • Инициализация и энтропия
  • Обновление PCG64 с PCG64DXSM
  • Политика совместимости

Функции

  • Параллельные приложения
    • SeedSequence spawning
    • Последовательность целых семян
    • Независимые потоки
    • Переход к состоянию генератора BitGenerator
  • Многопоточная генерация
  • Что нового или отличается
  • Сравнение производительности
    • Рекомендация
    • Замеры времени
    • Производительность на разных операционных системах
  • C API для случайных чисел
  • Примеры использования Numba, Cython, CFFI
    • Numba
    • Cython
    • CFFI
    • Новые генераторы BitGenerators
    • Примеры

Исходный источник генератора и BitGenerators

Этот пакет был разработан независимо от NumPy и был интегрирован в версии 1.17.0. Исходный репозиторий находится по адресу bashtage/randomgen.

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/index.html

Spec-Zone.ru

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