python - 使用 timeit() 和均值假设检验

标签 python performance benchmarking sl4a timeit

在比较 Android 上 SL4A 的较长(> 1 行)代码片段时,我使用 timeit() 作为准确基准时遇到了一些问题。比较时间时我得到了相当大的变化。 (可能与 android/dalvik vm 分配 CPU 时间的方式有关?)。

无论如何,我编写了一个脚本,该脚本使用假设检验来分析大型(~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)))

最佳答案

我认为这是明智的。您想要的是比较两个版本代码的置信区间是否重叠。 Georges et al (2007)对您尝试使用的技术有完整的描述。

关于python - 使用 timeit() 和均值假设检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354385/

相关文章:

java - 有没有更快的方法来比较 Java 中的两个 Int 数组?

C++,缓存局部性改进的基准测试方法?

python - 使用 FFT 实现二维卷积

database - 找到合适的数据结构以从两个列表中删除

python - 为什么我不能在终端中导入 numpy,而可以在 Jupyter Notebook 中导入它?

php - RedBeanPHP 慢 R::exportAll()

node.js - 是否有任何基准显示 Node.js 0.6.8 每秒可以处理多少 Comet 请求?

javascript - 为什么 push 方法比在 Javascript 中通过数组索引放置值要慢得多

python - 如何将 flask 配置为可通过公共(public) IP 接口(interface)访问?

python - Pandas 数据框的动态合并