1
我正在寫一些程序,使用Python進行排序算法比較。我想測量平均分揀時間。我在第一次測量時遇到問題。Python:進程平均時序,第一個/兩個慢得多
此:
for i in xrange(self.repeats):
# random list generator
data_orig = [random.randint(0, self.size - 1) for x in xrange(self.size)]
sorter = self.class_()
data = data_orig[:]
debug("%s for data size: %d, try #%d" % (sorter.__class__.__name__, self.size, i+1))
t1 = time.clock()
sorter.sort(data)
t2 = time.clock()
debug("Took: %0.4fms, shifts: %d, comparisons: %d" % ((t2-t1)*1000.0, sorter.shifts, sorter.comps))
class_
是插入排序類的引用。 對於大小= 1000,重複5次,我得到以下結果:
InsertionSort for data size: 1000, try #1
Took: 39.5341ms, shifts: 254340, comparisons: 255331
InsertionSort for data size: 1000, try #2
Took: 6.0765ms, shifts: 250778, comparisons: 251772
InsertionSort for data size: 1000, try #3
Took: 6.9946ms, shifts: 254189, comparisons: 255180
InsertionSort for data size: 1000, try #4
Took: 6.7421ms, shifts: 252162, comparisons: 253156
InsertionSort for data size: 1000, try #5
Took: 5.9584ms, shifts: 241412, comparisons: 242404
對於每一個排序算法我每次運行程序第一個結果是比別人更大。我用PyPy運行它(用Python看起來好,但速度很慢)。
我知道我可以簡單地ommit第一的結果,但這種解決方案並不滿足我:-)
任何想法?
這個。來自http://pypy.org/performance.html:**一般來說,在運行基準測試之前,確保你已經準備好了你的程序,如果你正在測量像服務器一樣長時間運行的東西** –
值得注意的是,即使在CPython第一次會慢一些,因爲有些東西會被加載到磁盤緩存中,甚至可能被編譯成.pyc文件的.py文件等等。「基準測試之前熱身」的想法是必須的。 PyPy使其更顯得必要的事實應該算作是額外的好處。 – abarnert
所以基本上這是一個好主意,省略前兩個測量或有沒有更好的解決方案來預熱我的程序?我關心結果。 – Dave