2
私は、AndroidでSL4Aの長い(> 1行)コードスニペットを比較するときにtimeit()を正確なベンチマークとして使用する際に問題がありました。私は時間を比較すると非常に高い変化を得ます。 (おそらくアンドロイド/ dalvik VMがCPU時間を割り当てる方法と関係があるでしょうか?)手段のtimeit()と仮説検定の使用
とにかく、大きな(〜1000)回のサンプルを分析するための仮説検定を使用するスクリプトを作成しました。このアプローチに何か問題はありますか?
from math import sqrt
import timeit
#statistics stuff
mean = lambda x: sum(x)/float(len(x))
def stdev (mean, dataset):
variance = ((x - mean)**2 for x in dataset)
deviation = sqrt(sum(variance)/float(len(dataset) - 1))
return deviation/sqrt(len(dataset))
def interval(mean, sampleDeviation, defaultZ = 1.57):
margin = sampleDeviation * defaultZ
return (mean - margin, mean + margin)
def testnull(dataset1, dataset2, defaultZ = 1.57):
mean1, mean2 = mean(dataset1), mean(dataset2)
sd1, sd2 = stdev(mean1, dataset1), stdev(mean2, dataset2)
interval1, interval2 = interval(mean1, sd1, defaultZ), interval(mean2, sd2, defaultZ)
inside = lambda x, y: y >= x[0] and y <= x[1]
if inside(interval1, interval2[0]) or inside(interval1, interval2[1]):
return True
return False
#timer setup
t1 = timeit.Timer('sum(x)', 'x = (i for i in range(1000))')
t2 = timeit.Timer('sum(x)', 'x = list(range(1000))')
genData, listData = [], []
for i in range(10000):
genData.append(t1.timeit())
listData.append(t2.timeit())
# testing the interval
print('The null hypothesis is {0}'.format(testnull(genData, listData)))
リンクありがとうございました。 –