尝试使用不同的随机函数来查看从列表中选择随机项的最快方法。 %timeit
想给我“最好的3”的最快时间,但由于运行是随机的,访问时间差异很大(从列表后面抓取,速度会很慢;从前面抓取,会很快)。从'%timeit`获得平均运行时间ipython magic
如何获得所有循环的平均值,而不是最好的?
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]
“尝试计时不同的随机函数以查看从列表中选择随机项目的最快方式。” - 这种(可能)抢先微优化将无处可用。 – kay
@Kay我模拟了数千万个节点的网络上的随机行走。我保证 - 即使很小的差异也会影响很大。目前,随机抽签是我运行时间的60%。 (不,这不是先发制人 - 我疯狂地描绘) –
你是否尝试过从numpy数组而不是列表绘制?我认为'np.random.choice'将'a'转换为一个数组,这可能相当昂贵。我看到了len(10)列表与数组之间6倍差异的因素。 –