如何将 timeit 用于多个值
How to use timeit for multiple values
我编写了一个使用 LU 分解求解线性方程 Ax=b 的代码,我被要求针对矩阵 A 的不同维度计算此方程的 运行 次。
我可以计算代码的 运行 时间,无论是对于给定的 A 和 b 还是对于不同维度的随机数,但我不确定如何为每个实现计算它的部分单一维度。我认为这可能是一个简单的 for
循环,但没有任何效果。
import timeit
setup = """
#function that solves the system
"""
repeats=5
result=timeit.timer('function', setup).timeit(number=repeats)/repeats
我也考虑过使用 timer.repeat
,但它并没有真正意义,或者我只是不明白这对我有什么帮助。任何提示将不胜感激。
请注意:你需要使用 timeit.Timer
而不是 timeit.timer
否则你会得到 AttributeError: module 'timeit' has no attribute 'timer'
尽管你也可以使用 timeit.timeit
这对单身人士很有用使用计时。
我建议查看 How to use timeit module 以了解使用 timeit
模块的有效方法,特别是使用 from __main__ import
语法:
def function(stuff):
NotImplemented
def setup():
NotImplemented
setup_code = """
from __main__ import function, setup
data = setup()
"""
func_code = "function(data)"
result = timeit.timeit(func_code,setup_code)
这样调用 setup
函数来生成基准测试所需的数据。因为它是一个函数,它还可以访问模块中的全局命名空间,所以它可以在其部分代码中使用在主程序中创建的信息:
import timeit
def function(stuff):
NotImplemented
def setup():
print("the setup_data is:",setup_data)
setup_code = """
from __main__ import function, setup
data = setup()
"""
func_code = "function(data)"
for i in range(4):
setup_data = i
result = timeit.timeit(func_code,setup_code)
print("result is",result)
因此,只需将 setup_data
定义为设置所需的数据(例如矩阵的维度),然后再 运行 宁 timeit.timeit
就可以了!
如果您想多次 运行 基准测试设置而不是每次设置,那么使用 repeat
而不是 timeit
是有意义的。
例如,假设您有一个排序算法,其速度取决于列表已经排序的程度。如果您只使用 timeit
结果可能会有很大差异,因为在设置后它每次都会使用相同的列表。您也不希望每次都生成一个列表,因为它会干扰实际的基准测试。
因此,在这种情况下,使用 repeat
对不同的列表进行排序而不包括基准测试中的列表创建是有意义的,此外,您还可以使用这些条目来查看 max
或min
次和平均值等
我编写了一个使用 LU 分解求解线性方程 Ax=b 的代码,我被要求针对矩阵 A 的不同维度计算此方程的 运行 次。
我可以计算代码的 运行 时间,无论是对于给定的 A 和 b 还是对于不同维度的随机数,但我不确定如何为每个实现计算它的部分单一维度。我认为这可能是一个简单的 for
循环,但没有任何效果。
import timeit
setup = """
#function that solves the system
"""
repeats=5
result=timeit.timer('function', setup).timeit(number=repeats)/repeats
我也考虑过使用 timer.repeat
,但它并没有真正意义,或者我只是不明白这对我有什么帮助。任何提示将不胜感激。
请注意:你需要使用 timeit.Timer
而不是 timeit.timer
否则你会得到 AttributeError: module 'timeit' has no attribute 'timer'
尽管你也可以使用 timeit.timeit
这对单身人士很有用使用计时。
我建议查看 How to use timeit module 以了解使用 timeit
模块的有效方法,特别是使用 from __main__ import
语法:
def function(stuff):
NotImplemented
def setup():
NotImplemented
setup_code = """
from __main__ import function, setup
data = setup()
"""
func_code = "function(data)"
result = timeit.timeit(func_code,setup_code)
这样调用 setup
函数来生成基准测试所需的数据。因为它是一个函数,它还可以访问模块中的全局命名空间,所以它可以在其部分代码中使用在主程序中创建的信息:
import timeit
def function(stuff):
NotImplemented
def setup():
print("the setup_data is:",setup_data)
setup_code = """
from __main__ import function, setup
data = setup()
"""
func_code = "function(data)"
for i in range(4):
setup_data = i
result = timeit.timeit(func_code,setup_code)
print("result is",result)
因此,只需将 setup_data
定义为设置所需的数据(例如矩阵的维度),然后再 运行 宁 timeit.timeit
就可以了!
如果您想多次 运行 基准测试设置而不是每次设置,那么使用 repeat
而不是 timeit
是有意义的。
例如,假设您有一个排序算法,其速度取决于列表已经排序的程度。如果您只使用 timeit
结果可能会有很大差异,因为在设置后它每次都会使用相同的列表。您也不希望每次都生成一个列表,因为它会干扰实际的基准测试。
因此,在这种情况下,使用 repeat
对不同的列表进行排序而不包括基准测试中的列表创建是有意义的,此外,您还可以使用这些条目来查看 max
或min
次和平均值等