时间测量 - 在iterval中进行多次测量和变量

时间:2016-12-28 19:34:10

标签: python function time measurement

我要测量我的函数表示C:

需要多长时间
C in range (0, 100, 1)

给出列表中的整数。 有我的代码:

import itertools
import time    
def amount(c):
    a = [1, 2, 5, 10, 20, 50]

    dp = [[0 for _ in range(len(a))] for __ in range(c + 1)]
    dp[0][0] = 1

    for i in range(c):
        for j in range(len(a)):
            for k in range(j, len(a)):
                if i + a[k] <= c:
                     dp[i + a[k]][k] += dp[i][j]

    return sum(dp[c])

我决定创建一个函数来测量我的函数调用的持续时间:

def count_once(c):
    start = time.perf_counter()
    amount(c)
    return time.perf_counter() - start

这很简单。现在我想对0到100的每个C进行10次测量,然后计算每个C的平均值 所以输出应该包含100个数字(每个数字都是平均值) 我从这开始:

for i in range(0, 101, 1):
    count_once(i)
    print(count_once(i))

但我不知道如何使用该公式计算每个C的平均10次测量值。

1 个答案:

答案 0 :(得分:2)

为什么不:

for C in range(100):
     print "C=",C,"averages",sum([count_once(C) for_ in range(10)])/10.0

您可以轻松地更改第一个range(100),其中包含您要测试的C值的任何列表/可迭代值,以及第二行上的10s,以及您要平均的数量。

顺便说一下,为了消除时间开销,我会对此有所不同:

def count(c,times):
    start = time.perf_counter()
    for _ in range(times): amount(c)
    return (time.perf_counter() - start)/float(times)

然后你的外环变成:

for C in range(100): print "C=",C,"averages",count(C,10)

我可能会使用超过10次(比如至少100或1000)。