Попытка синхронизировать различные случайные функции, чтобы найти самый быстрый способ выбрать случайный элемент из списка. %timeit
хочет дать мне «лучшее из 3» самое быстрое время, но поскольку прогоны случайны, время доступа сильно различается (захват из конца списка будет медленным; захват из начала будет быстрым).
Как мне получить среднее значение по всем циклам, а не лучшее из них?
a = [0,6,3,1,3,9,4,3,2,6]
%timeit random.choice(a)
%timeit a[random.randint(0,len(a)-1)]
%timeit a[np.random.randint(0,len(a)-1)]
%timeit np.random.choice(a,1)[0]
Текущий вывод (с учетом разницы во времени):
%timeit random.choice(a)
The slowest run took 9.87 times longer than the fastest. This could mean that an intermediate result is being cached
1000000 loops, best of 3: 1.23 µs per loop
Обновление: тупой подход:
%time for i in range(100000): random.choice(a)
%time for i in range(100000): a[random.randint(0,len(a)-1)]
%time for i in range(100000): a[np.random.randint(0,len(a)-1)]
%time for i in range(100000): np.random.choice(a,1)[0]
np.random.choice
приводитa
к массиву, что может быть довольно дорого. Я вижу разницу в 6 раз для спискаlen(10)
и массива. - person ali_m   schedule 12.02.2016a
в качестве примера. Но спасибо за мысль! - person nick_eu   schedule 13.02.2016