Что нового или изменилось
Предупреждение
Метод Бокса—Мюллера, используемый для генерации нормальных распределений в NumPy, больше недоступен в Generator. Невозможно воспроизвести точные случайные значения, используя Generator для нормального распределения или любого другого распределения, которое зависит от нормального, такого как gamma или standard_t. Если вам необходимы потоки с обратной совместимостью по битам, используйте RandomState.
Быстрое сравнение устаревшего mtrand с новым Generator
| Функция | Старый эквивалент | Примечания |
Generator | RandomState |
Generator требует источника потока, называемого BitGenerator. Несколько таких источников предоставляются. RandomState по умолчанию использует генератор Мерсенна-Твистер MT19937, но также может быть инициализирован любым BitGenerator. |
random |
random_sample, rand
|
Получение значений из BitGenerator, преобразование их в Поддерживается множество других распределений. |
integers |
randint, random_integers
| Используйте параметр endpoint для настройки включения или исключения конечной точки интервала high |
И более подробно:
-
random_entropyпредоставляет доступ к системному источнику случайности, который используется в криптографических приложениях (например,/dev/urandomв Unix). - Генерация из комплексного нормального распределения (
complex_normal) - Генераторы нормального, экспоненциального и гамма-распределений используют 256-шаговые методы Зиггурата, которые в 2-10 раз быстрее, чем реализация по умолчанию NumPy в
standard_normal,standard_exponentialилиstandard_gamma. -
integersтеперь является стандартным способом генерации целых случайных чисел из дискретного равномерного распределения. Методыrandиrandnдоступны только через устаревшую реализациюRandomState. Это заменяет какrandint, так и устаревшийrandom_integers. - Метод Бокса—Мюллера для генерации нормальных распределений больше недоступен.
- Все генераторы битов могут генерировать числа с плавающей запятой, uint64 и uint32 через CTypes (
ctypes) и CFFI (cffi). Это позволяет использовать эти генераторы битов в numba. - Генераторы битов могут использоваться в дочерних проектах через Cython.
In [1]: from numpy.random import Generator, PCG64 In [2]: import numpy.random In [3]: rg = Generator(PCG64()) In [4]: %timeit rg.standard_normal(100000) ...: %timeit numpy.random.standard_normal(100000) ...: 792 us +- 4.07 us per loop (mean +- std. dev. of 7 runs, 1000 loops each) 1.87 ms +- 20.3 us per loop (mean +- std. dev. of 7 runs, 1000 loops each)
In [5]: %timeit rg.standard_exponential(100000) ...: %timeit numpy.random.standard_exponential(100000) ...: 372 us +- 2.73 us per loop (mean +- std. dev. of 7 runs, 1000 loops each) 1.35 ms +- 7.16 us per loop (mean +- std. dev. of 7 runs, 1000 loops each)
In [6]: %timeit rg.standard_gamma(3.0, 100000) ...: %timeit numpy.random.standard_gamma(3.0, 100000) ...: 1.84 ms +- 6.24 us per loop (mean +- std. dev. of 7 runs, 1000 loops each) 3.92 ms +- 39.3 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
- Необязательный
dtypeаргумент, принимающийnp.float32илиnp.float64для генерации одно- или двойной точности равномерных случайных переменных для выбранных распределений- Равномерные (
randomиintegers) - Нормальные (
standard_normal) - Стандартные гамма-распределения (
standard_gamma) - Стандартные экспоненциальные (
standard_exponential)
- Равномерные (
In [7]: rg = Generator(PCG64(0)) In [8]: rg.random(3, dtype='d') Out[8]: array([0.63696169, 0.26978671, 0.04097352]) In [9]: rg.random(3, dtype='f')
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/random/new-or-different.html