Spec-Zone.ru › NumPy 1.17

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

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

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

Быстрое сравнение устаревшего mtrand с новым Generator

Функция Старый эквивалент Примечания
Generator RandomState Generator требует источника потока, называемого BitGenerator. Несколько таких источников предоставляются. RandomState по умолчанию использует генератор Мерсенна-Твистер MT19937, но также может быть инициализирован любым BitGenerator.
random random_sample, rand

Получение значений из BitGenerator, преобразование их в float64 в интервале [0.0., `` 1.0)``. В дополнение к параметру size, теперь поддерживаются dtype='d' или dtype='f', и параметр out для заполнения массива, предоставленного пользователем.

Поддерживается множество других распределений.

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

Spec-Zone.ru

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