2013-10-26 15 views
3

我有一個函數f(x)需要輸入一個列表x 100個隨機浮動0和1之間。不同的列表將導致不同的運行時間f如何使用timeit哪裏每個測試需要隨機設置

我想知道f平均需要多長時間運行多少個不同的隨機列表。什麼是最好的方法來做到這一點?我是否應該使用timeit,如果有的話,是否有一種方法可以做到這一點,而不需要在每個試驗中生成每個隨機列表所需的時間?

這是我會怎麼做,而不timeit(僞):

for i = 1 to 10000: 
    x = random list 
    start = current time 
    f(x) 
    end = current time 
    results.append(end - start) 
return mean(results) 
+0

http://stackoverflow.com/questions/2245161/how-to-measure-execution-time-of-functions-automatically-in-python – svs

+0

@lnwvr笑,我從來沒有看到這一點。如果我這樣做了,我只需複製它,不需要製作我自己的裝飾器! :P –

回答

1
import timeit, random 

def summer(myList): 
    result = 0 
    for num in myList: 
     result += num 
    return result 

for i in range(10): 
    x = [random.randint(0, 100) for i in range(100000)] 
    print timeit.timeit("summer(x)", setup="from __main__ import x, summer", number = 100) 

您可以導入使用from __main__ import x

+0

在一個循環中多次不調用'timeit'會破壞使用它的目的? – Flash

+0

@Andrew你想每次都用隨機輸入來測試函數,對吧?這就是爲什麼它在一個循環,每次隨機輸入。 – thefourtheye

+0

以這種方式使用'timeit'比我的僞代碼更好嗎? – Flash

2

你可以做一個計時器裝飾變量:

這裏是一些示例代碼:

from time import time 


class Timer(object): 
    def __init__(self, func): 
     """ 
     Decorator that times a function 
     @param func: Function being decorated 
     @type func: callable 
     """ 
     self.func = func 

    def __call__(self, *args, **kwargs): 
     start = time() 
     self.func(*args, **kwargs) 
     end = time() 
     return end - start 


@Timer 
def cheese(): 
    for var in xrange(9999999): 
     continue 

for var in xrange(100): 
    print cheese() 

工作example,更少的循環。

0

我認爲這是訣竅。它會執行setup每重複一次,然後執行stmtnumber=1時間。不過我不認爲這比你發佈的簡單循環好得多。

import timeit 

stmt = '[x*x*x for x in xrange(n)]' # just an example 
setup = 'import random; n = random.randint(10, 100)' 
r = 10000 
times = timeit.repeat(stmt, setup, repeat=r, number=1) 

print min(times), max(times), sum(times)/r 

還有一個「單元模式」,您可以用timeit in the IPython shell使用,但它只返回禁食時間並沒有簡單的方法來改變這種(?)。

import random 

%%timeit -r 10000 -n 1 n = random.randint(10,100) 
var = [x*x*x for x in xrange(n)] 
相關問題