时间测量 - 间隔中的许多测量和变量
Time measurement - many measurements and variable in an iterval
我要测量我的函数代表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
这很容易。现在我想对每个 C 从 0 到 100 进行 10 次测量,然后计算每个 C 的这些测量的平均值。
所以输出应该包含 100 个数字(每个数字都是平均值)。
我从这个开始:
for i in range(0, 101, 1):
count_once(i)
print(count_once(i))
但我不知道如何使用该公式计算每个 C 的 10 个测量值的平均值。
为什么不呢:
for C in range(100):
print "C=",C,"averages",sum([count_once(C) for_ in range(10)])/10.0
您可以轻松地将第一个 range(100)
更改为您想要测试的 C
个值中的任何 list/iterable 个,并将第二行的 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 次)。
我要测量我的函数代表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
这很容易。现在我想对每个 C 从 0 到 100 进行 10 次测量,然后计算每个 C 的这些测量的平均值。
所以输出应该包含 100 个数字(每个数字都是平均值)。
我从这个开始:
for i in range(0, 101, 1):
count_once(i)
print(count_once(i))
但我不知道如何使用该公式计算每个 C 的 10 个测量值的平均值。
为什么不呢:
for C in range(100):
print "C=",C,"averages",sum([count_once(C) for_ in range(10)])/10.0
您可以轻松地将第一个 range(100)
更改为您想要测试的 C
个值中的任何 list/iterable 个,并将第二行的 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 次)。