Spec-Zone.ru › NumPy 1.18

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

Процедуры генерации случайных чисел NumPy производят псевдослучайные числа, используя комбинацию BitGenerator для создания последовательностей и Generator для использования этих последовательностей для выборки из различных статистических распределений:

  • BitGenerators: Объекты, генерирующие случайные числа. Обычно это слова без знака, заполненные последовательностями из 32 или 64 случайных битов.
  • Generators: Объекты, преобразующие последовательности случайных битов из BitGenerator в последовательности чисел, которые следуют определённому вероятностному распределению (например, равномерному, нормальному или биномиальному) в заданном интервале.

С версии NumPy 1.17.0 Generator можно инициализировать с помощью различных BitGenerators. Он предоставляет множество различных вероятностных распределений. См. NEP 19 для контекста обновлённых процедур генерации случайных чисел NumPy. Легасные процедуры генерации случайных чисел RandomState всё ещё доступны, но ограничены одним BitGenerator.

Для удобства и обратной совместимости методы отдельной инстанции RandomState импортированы в пространство имён numpy.random, см. Легасы генерация случайных чисел для полного списка.

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

Вызовите default_rng для получения новой инстанции Generator, а затем вызовите её методы для получения выборок из различных распределений. По умолчанию Generator использует биты, предоставленные PCG64, что имеет лучшие статистические свойства, чем устаревшая MT19937, используемая в RandomState.

# Do this
from numpy.random import default_rng
rng = default_rng()
vals = rng.standard_normal(10)
more_vals = rng.standard_normal(10)

# instead of this
from numpy import random
vals = random.standard_normal(10)
more_vals = random.standard_normal(10)

Generator может быть использована как замена RandomState. Обе инстанции класса содержат внутреннюю инстанцию BitGenerator для предоставления потока битов, к которой можно обратиться как gen.bit_generator. Некоторые давно ожидаемые изменения API означают удаление устаревших и совместимых методов из Generator

RandomState

Generator

Примечания

random_sample,

random

Совместимо с random.random

rand

randint,

integers

Добавьте endpoint параметр

random_integers

tomaxint

удалено

Используйте integers(0, np.iinfo(np.int_).max, endpoint=False)

seed

удалено

Используйте SeedSequence.spawn

См. Что нового или изменилось для получения дополнительной информации

Для поддержки как RandomState , так и Generator, с пониманием того, что интерфейсы немного отличаются, можно использовать код, подобный следующему

try:
    rg_integers = rg.integers
except AttributeError:
    rg_integers = rg.randint
a = rg_integers(1000)

Семена могут быть переданы любому из BitGenerators. Предоставленное значение смешивается с помощью SeedSequence для расширения возможной последовательности семян в более широком диапазоне начальных состояний BitGenerator. Здесь используется PCG64 и обернута в Generator.

from numpy.random import Generator, PCG64
rg = Generator(PCG64(12345))
rg.standard_normal()

Введение

Новая инфраструктура использует другой подход к генерации случайных чисел по сравнению с объектом RandomState. Генерация случайных чисел разделена на два компонента: генератор битов и генератор случайных чисел.

У BitGenerator ограниченный набор задач. Он управляет состоянием и предоставляет функции для создания случайных двойных и случайных значений без знака 32 и 64 битов.

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

Генератор Generator является объектом, с которым взаимодействует пользователь, и почти идентичен RandomState. Стандартный метод инициализации генератора передаёт генератор битов PCG64 в качестве единственного аргумента.

from numpy.random import default_rng
rg = default_rng(12345)
rg.random()

Также можно напрямую инициализировать Generator с экземпляром BitGenerator. Для использования устаревшего алгоритма MT19937, его можно инициализировать напрямую и передать в Generator.

from numpy.random import Generator, MT19937
rg = Generator(MT19937(12345))
rg.random()

Что нового или изменилось

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

Метод Box-Muller, используемый для получения нормальных распределений NumPy, больше недоступен в Generator. Невозможно воспроизвести точные случайные значения с помощью Generator для нормального распределения или любого другого распределения, которое зависит от нормального распределения, например, RandomState.gamma или RandomState.standard_t. Если вам необходимы битово-совместимые потоки, используйте RandomState.

  • Функции генератора, нормальные, экспоненциальные и гамма-функции, используют методы Зиггурата с 256 шагами, которые в 2-10 раз быстрее, чем реализации Box-Muller или обратной функции распределения NumPy.
  • Дополнительный аргумент dtype, который принимает значения np.float32 или np.float64, чтобы генерировать одно- или двойной точности равномерные случайные величины для выбранных распределений
  • Дополнительный аргумент out, который позволяет заполнять существующие массивы для выбранных распределений
  • Все генераторы бит могут генерировать значения с двойной точностью, uint64 и uint32 через CTypes (PCG64.ctypes) и CFFI (PCG64.cffi). Это позволяет использовать генераторы бит в numba.
  • Генераторы бит могут быть использованы в последующих проектах через Cython.
  • Generator.integers теперь является стандартным способом генерации целочисленных случайных чисел из дискретного равномерного распределения. Методы rand и randn доступны только через устаревший RandomState. Ключевое слово endpoint может быть использовано для указания открытых или закрытых интервалов. Это заменяет как randint, так и устаревший random_integers.
  • Generator.random теперь является стандартным способом генерации случайных чисел с плавающей запятой, заменяя RandomState.random_sample, RandomState.sample, и RandomState.ranf. Это согласуется с функцией random.random Python.
  • Все генераторы бит в numpy используют SeedSequence для преобразования семян в инициализированные состояния.

См. Что нового или отличается для полного списка улучшений и отличий от традиционной Randomstate.

Параллельная генерация

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

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

Концепции

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

Функции

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

Исходный код генератора и генераторов бит

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

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

Spec-Zone.ru

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