Python 如何将timeit用于多个值
我已经编写了一个代码,它使用LU分解求解线性方程Ax=b,我被要求计算矩阵a的各种维度的运行时间 我可以计算代码的运行时间,无论是对于给定的A和b,还是对于不同维度的随机代码,但我不确定如何实现计算每个维度的部分。我认为这可能是一个简单的Python 如何将timeit用于多个值,python,timeit,Python,Timeit,我已经编写了一个代码,它使用LU分解求解线性方程Ax=b,我被要求计算矩阵a的各种维度的运行时间 我可以计算代码的运行时间,无论是对于给定的A和b,还是对于不同维度的随机代码,但我不确定如何实现计算每个维度的部分。我认为这可能是一个简单的for循环,但没有任何效果 import timeit setup = """ #function that solves the system """ repeats=5 result=timeit.timer('function', setup).tim
for
循环,但没有任何效果
import timeit
setup = """
#function that solves the system
"""
repeats=5
result=timeit.timer('function', setup).timeit(number=repeats)/repeats
我还考虑过使用
定时器。重复一下,但这没有什么意义,或者我就是不明白这对我有什么帮助。任何提示都将不胜感激。请注意:您需要使用timeit.Timer
而不是timeit.Timer
,否则您将获得AttributeError:module'timeit'没有属性“Timer”
,尽管您也可以使用timeit.timeit
,这对一次性计时非常有用
我建议寻找使用timeit
模块的有效方法,特别是使用from\uuuu main\uuuuu 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)
因此,在运行timeit.timeit
之前,只需将setup\u data
定义为设置所需的数据(例如矩阵的维度),就可以了
如果您想对基准测试运行多次设置,但不是每次,那么使用repeat
而不是timeit
是有意义的
例如,假设您有一个排序算法,其速度取决于列表已排序的程度。如果只使用timeit
,结果可能会有很大的不同,因为在设置之后,每次都会使用相同的列表。您也不希望每次传递都生成一个列表,因为它会干扰实际的基准测试
因此,在这种情况下,可以使用repeat
对不同的列表进行排序,而不在基准中包含列表创建,此外,您还可以使用条目查看max
或min
时间和平均值等。欢迎使用StackOverflow!您是否可能需要设置来创建矩阵,然后使用函数来求解矩阵?不清楚您是否需要有关timeit
的帮助或生成矩阵的算法。我的设置创建矩阵并解决函数,我不知道如何生成每个矩阵的运行时间。例如,安装程序获取维度从1到50的随机矩阵,并为每个矩阵求解系统,我可以计算此代码的运行时间,但我不知道如何为不同维度的每个特定矩阵执行此操作。这更有意义吗?由于它是单工,我不允许在线发布,所以我不能在这里写代码,对不起。timeit
的工作方式是它运行安装程序,然后乘以运行主代码所需的时间number
次。记录需要作为主语句的解决部分的运行时间。抱歉,我没有真正理解。你能说得更清楚一点吗?运行help(timeit.Timer.timeit)
获取文档,但似乎你在安装程序中做所有事情,而不是使用main语句。在设置中创建并求解矩阵后,您正在计时的功能是什么?看起来真的需要解决问题。