python-测量功能时间
python-measure function time
我在测量函数的时间时遇到问题。
我的函数是 "linear search":
def linear_search(obj, item,):
for i in range(0, len(obj)):
if obj[i] == item:
return i
return -1
然后我创建了另一个函数来测量时间 100 次并将所有结果添加到列表中:
def measureTime(a):
nl=[]
import random
import time
for x in range(0,100): #calculating time
start = time.time()
a
end =time.time()
times=end-start
nl.append(times)
return nl
当我使用 measureTime(linear_search(list,random.choice(range(0,50))))
时,函数总是 returns [0.0]
.
什么会导致这个问题?谢谢。
看看下面的例子,不知道你到底想达到什么目的所以我猜了;)
import random
import time
def measureTime(method, n, *args):
start = time.time()
for _ in xrange(n):
method(*args)
end = time.time()
return (end - start) / n
def linear_search(lst, item):
for i, o in enumerate(lst):
if o == item:
return i
return -1
lst = [random.randint(0, 10**6) for _ in xrange(10**6)]
repetitions = 100
for _ in xrange(10):
item = random.randint(0, 10**6)
print 'average runtime =',
print measureTime(linear_search, repetitions, lst, item) * 1000, 'ms'
你实际上是将 linear_search
的结果传递给函数 measureTime
,你需要传递函数和参数而不是让它们在 measureTime
函数中执行,就像@martijnn2008回答
或者更明智的做法是,您可以考虑使用 timeit 模块来完成您的工作
from functools import partial
import timeit
def measureTime(n, f, *args):
# return average runtime for n number of times
# use a for loop with number=1 to get all individual n runtime
return timeit.timeit(partial(f, *args), number=n)
# running within the module
measureTime(100, linear_search, list, random.choice(range(0,50)))
# if running interactively outside the module, use below, lets say your module name mymodule
mymodule.measureTime(100, mymodule.linear_search, mymodule.list, mymodule.random.choice(range(0,50)))
我在测量函数的时间时遇到问题。
我的函数是 "linear search":
def linear_search(obj, item,):
for i in range(0, len(obj)):
if obj[i] == item:
return i
return -1
然后我创建了另一个函数来测量时间 100 次并将所有结果添加到列表中:
def measureTime(a):
nl=[]
import random
import time
for x in range(0,100): #calculating time
start = time.time()
a
end =time.time()
times=end-start
nl.append(times)
return nl
当我使用 measureTime(linear_search(list,random.choice(range(0,50))))
时,函数总是 returns [0.0]
.
什么会导致这个问题?谢谢。
看看下面的例子,不知道你到底想达到什么目的所以我猜了;)
import random
import time
def measureTime(method, n, *args):
start = time.time()
for _ in xrange(n):
method(*args)
end = time.time()
return (end - start) / n
def linear_search(lst, item):
for i, o in enumerate(lst):
if o == item:
return i
return -1
lst = [random.randint(0, 10**6) for _ in xrange(10**6)]
repetitions = 100
for _ in xrange(10):
item = random.randint(0, 10**6)
print 'average runtime =',
print measureTime(linear_search, repetitions, lst, item) * 1000, 'ms'
你实际上是将 linear_search
的结果传递给函数 measureTime
,你需要传递函数和参数而不是让它们在 measureTime
函数中执行,就像@martijnn2008回答
或者更明智的做法是,您可以考虑使用 timeit 模块来完成您的工作
from functools import partial
import timeit
def measureTime(n, f, *args):
# return average runtime for n number of times
# use a for loop with number=1 to get all individual n runtime
return timeit.timeit(partial(f, *args), number=n)
# running within the module
measureTime(100, linear_search, list, random.choice(range(0,50)))
# if running interactively outside the module, use below, lets say your module name mymodule
mymodule.measureTime(100, mymodule.linear_search, mymodule.list, mymodule.random.choice(range(0,50)))