numpy
более эффективен при генерации больших выборок (массивов) случайных чисел.Например,
In [10]: %timeit np.random.randint(1,1000000, 1000000)
5.14 ms ± 64.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [11]: %timeit [random.choice(range(1,1000000)) for _ in range(1000000)]
1.01 s ± 14.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Кроме того, см. Как рассчитать сегмент кода для тестирования производительности с помощью Pythons timeit? о том, как выполнять временные тесты.Когда вы используете time.clock()
, вы должны хотя бы попытаться повторить операцию несколько раз, а затем вычислить среднее время.Более целесообразно использовать timeit
для временных тестов.Кроме того, как уже упоминали другие в комментариях, print()
занимает значительно больше времени, чем генерация случайных чисел, поэтому ваш тест времени в основном измеряет, как быстро работает print()
.Вместо этого вы должны сделать что-то вроде этого:
In [12]: repeat = 1000000
...: t0 = time.clock()
...: for _ in range(repeat):
...: np.random.randint(1, 1000000)
...: t1 = time.clock()
...: print((t1 - t0) / repeat)
1.3564629999999908e-06
In [13]: repeat = 1000000
...: t2 = time.clock()
...: for _ in range(repeat):
...: random.choice(range(1, 1000000))
...: t3 = time.clock()
...: print((t3 - t2) / repeat)
1.0206699999999956e-06
Итак, для одного числа numpy
в среднем примерно на 35% медленнее, чем встроенный генератор случайных чисел.Однако предыдущие тесты показали, что при генерации больших выборок numpy
значительно быстрее.