Два вопроса здесь. Во-первых, для библиотеки pure- Python random
вы, вероятно, хотите использовать sample
вместо choices
для выборки без замены. Это несколько меняет ориентир. Во-вторых, np.random.choice
имеет более эффективные альтернативы для отбора проб без замены. Это известная проблема , связанная со случайным генератором API. Вы можете использовать np.random.Generator
для повышения производительности. Мое время:
%timeit meansample = [ np.mean( np.random.choice( s, samplesize, replace=False)) for _ in range(500)]
# 1 loop, best of 3: 12.4 s per loop
%timeit meansample = [np.mean(random.choices(s, k=samplesize)) for x in range(0,500)]
# 10 loops, best of 3: 118 ms per loop
sl = s.tolist()
%timeit meansample = [np.mean(random.sample(sl, k=samplesize)) for x in range(0,500)]
# 1 loop, best of 3: 219 ms per loop
g = np.random.Generator(np.random.PCG64())
%timeit meansample = [ np.mean( g.choice( s, samplesize, replace=False)) for _ in range(500)]
# 10 loops, best of 3: 25 ms per loop
Итак, без замены random.sample
превосходит np.random.choice
, но медленнее, чем np.random.Generator.choice
.