解释为什么*运算符比**更快运行的Python经验法则

时间:2018-08-08 20:22:34

标签: python python-3.x performance optimization operators

我的问题既具体又常见(请参见示例)。我正在寻找编写快速运行的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)

解释为什么 * 相对于 ** 运算符适用的原因将很有帮助。关于原则,经验法则和资源的建议会更加有用,这将帮助我认识到改进代码的机会。有什么建议吗?

0 个答案:

没有答案