Python中的经验法则可以解释为什么*运算符比**运算符运行得更快。

6 浏览
0 Comments

Python中的经验法则可以解释为什么*运算符比**运算符运行得更快。

我的问题既是具体的(见示例),又是一般性的。我正在寻找编写运行速度快的Python代码的最佳实践。在评估表达式或构造语句的两种或更多方式中,我希望在进行timeit比较测试之前能有一个有根据的猜测,哪种方式会更快运行。\n例如:\n

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])

\n我曾尝试通过将x_i*x_i改为x_i**2来加快速度。但是,如果我正确地阅读结果的话,实际上它慢了约3倍:\n

%%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)

\n解释为什么对于*运算符和**运算符而言这是真实的将会很有帮助。更有帮助的是提供原则、经验法则和资源的建议,这些将帮助我识别改进代码的机会。有什么建议吗?

0