2012-02-19 10 views
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))) 

答えて

2

私はそれが賢明だと思います。あなたが望むのは、オーバーラップのコードの両方のバージョンの信頼区間を比較することです。 Georges et al (2007)には、使用しようとしている技術の完全な説明があります。

+0

リンクありがとうございました。 –

関連する問題