嘗試使用不同的隨機函數來查看從列表中選擇隨機項的最快方法。 %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倍差異的因素。 –