Python 如何将timeit用于多个值

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

我已经编写了一个代码,它使用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

我还考虑过使用
定时器。重复一下
,但这没有什么意义,或者我就是不明白这对我有什么帮助。任何提示都将不胜感激。

请注意:您需要使用
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语句。在设置中创建并求解矩阵后,您正在计时的
功能是什么?看起来真的需要解决问题。