Использование timeit () и проверки гипотезы для средних - PullRequest
2 голосов
/ 20 февраля 2012

У меня были некоторые проблемы с использованием timeit () в качестве точного теста при сравнении длинных (> 1 строк) фрагментов кода для SL4A на Android.Я получаю довольно большой разброс при сравнении времени.(Возможно, это связано с тем, как android / dalvik vm выделяет время процессора?).

В любом случае, я написал скрипт, который использует проверку гипотезы для анализа больших (~ 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)))

1 Ответ

2 голосов
/ 20 февраля 2012

Я думаю, что это разумно.То, что вы хотите, это сравнить доверительные интервалы обеих версий кода для перекрытия. Georges et al (2007) имеет полное описание техники, которую вы пытаетесь использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...