我试图在不同大小的输入上对函数进行基准测试。
例如,我有一个函数something(array),它将可变长度的numpy数组作为输入和可能的参数列表( args = [np.random.rand(3, 2, i) for i in range(1,1000)] )。我现在要做的是测试something需要依赖于输入的时间。
我目前所做的工作如下:
def iterator(ys):
times = []
for i in range(len(ys)):
start = timer()
test = something(ys[i])
end = timer()
times.append(end - start)
return times这样我就能得到我想要的结果。问题是,使用这种方法,我不会得到任何关键数字,如方差或平均每个输入大小。我还可以执行第二个循环,运行几次iterator,并使用结果计算关键数字,但如果存在,我宁愿使用已建立的方法。
我试图应用pytest-benchmark (https://pytest-benchmark.readthedocs.io/en/stable/),但无法找到将参数列表传递给函数的方法。
也许你们中的一些人对此有一个很好的解决方案!
发布于 2019-12-12 14:39:38
最方便的方法是使用Ipython行魔术%timeit或单元格魔术%%timeit执行定时测量。我通常定义要在循环中测试和运行的输入数据大小:
def list_search(lst, item):
for el in lst:
if el == item:
return True
return False
for n in (100, 1000, 10000, 100000):
data = list(range(n))
%timeit list_search(data, data[-1])%timeit函数接受多个参数来修改其行为:
%timeit [-n -r -t_c -q -p -o]语句
选项:-n:在循环中执行给定的语句时间。如果不提供,则确定以获得足够的精度。
-r:重复次数,每个重复由循环组成,并取得最佳效果。违约:7
(来自https://ipython.readthedocs.io/en/stable/interactive/magics.html)
https://stackoverflow.com/questions/59306904
复制相似问题