我的问题既具体又常见(请参见示例)。我正在寻找编写快速运行的python代码的最佳实践。在评估表达式或构造语句的两种或多种方式中,我想进行一种有根据的猜测,即在进行timeit
比较测试之前,哪种运行速度更快。
例如:
xx = [1,2,3,4,5]
x_bar = int(sum(xx)/len(xx)) # or = np.mean(xx)
x_c = [int(x_i - x_bar) for x_i in xx]
TSS = sum([x_i*x_i for x_i in x_c])
我认为我可以通过将x_i*x_i
更改为x_i**2
来加快速度。但是,如果我正确读取结果,实际上速度要慢3倍左右:
%%timeit
sum([x_i*x_i for x_i in x_c])
# 670 ns ± 19 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
sum([x_i**2 for x_i in x_c])
# 1.8 µs ± 120 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
解释为什么 *
相对于 **
运算符适用的原因将很有帮助。关于原则,经验法则和资源的建议会更加有用,这将帮助我认识到改进代码的机会。有什么建议吗?