Я столкнулся с этим сегодня и просто хотел добавить некоторые детали времени к этому вопросу. Я видел, что упоминал Джун, где, в частности, случайные числа из нормального распределения генерировались намного быстрее с numpy
, чем с rvs
в scipy.stats
. Как упомянул user333700, есть некоторые издержки с rvs
, но если вы генерируете массив случайных значений, этот пробел закрывается по сравнению с numpy
. Вот пример времени Юпитера:
from scipy.stats import norm
import numpy as np
n = norm(0, 1)
%timeit -n 1000 n.rvs(1)[0]
%timeit -n 1000 np.random.normal(0,1)
%timeit -n 1000 a = n.rvs(1000)
%timeit -n 1000 a = [np.random.normal(0,1) for i in range(0, 1000)]
%timeit -n 1000 a = np.random.randn(1000)
Это при моем запуске с numpy
версия 1.11.1 и scipy
0.17.0 выводит:
1000 loops, best of 3: 46.8 µs per loop
1000 loops, best of 3: 492 ns per loop
1000 loops, best of 3: 115 µs per loop
1000 loops, best of 3: 343 µs per loop
1000 loops, best of 3: 61.9 µs per loop
Таким образом, генерация одной случайной выборки из rvs
была почти в 100 раз медленнее, чем использование numpy
напрямую. Однако, если вы генерируете массив значений, пробел закрывается (от 115 до 61,9 микросекунд).
Если вы можете избежать этого, вероятно, не вызывайте rvs
, чтобы получить одно случайное значение множество раз в цикле.