【问题标题】:Time measurement - many measurements and variable in an iterval时间测量 - 在一个区间内进行多次测量和变量
【发布时间】:2016-12-28 19:34:10
【问题描述】:

我要测量我的函数代表 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 次测量值。

【问题讨论】:

  • sum([count_once(I) for I in range(100)])/100.0?
  • @kabanus 但我需要 100 个不同的平均值。我想为每个 C 测量 10 次时间,然后计算每个 C 的平均值。
  • 所以你的意思是你的意思是你想为 10 个不同的参数平均 count_once 超过 10 次?说 C=0...9?
  • @kabanus 我想对 C = 1 使用 count_once 10 次。然后计算平均值。然后对 C = 2 使用 count_once 10 次。再一次 - 平均。依此类推,直到 C = 100。最后,我希望每个 C 有 100 个平均值。

标签: python function time measurement


【解决方案1】:

为什么不:

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 次)。

【讨论】:

  • 我想在这里指出 range(0,101,1)=range(101) 并产生从 0 到 100 的数字(101 个数字)。
  • 非常感谢!这真的对我有帮助,而且很好 - 解决方案不是很复杂。是的,当然——你是对的。我在范围上犯了一个错误。消除时间开销真的很重要吗?
  • 通常是。尝试并测试它!用times=1,10,100,1000运行count函数,看看有没有区别!也不要忘记标记接受 - 那是赞成/反对票旁边的 V - 所以用户知道这已经被回答了。
  • 谢谢。我要测试一下 :) 我是 Python 新手,所以我需要一些时间来了解什么是重要的,什么不重要!
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 2021-03-16
  • 1970-01-01
  • 2022-01-16
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多