在优化代码的慢速部分时,我惊讶于A.sum()几乎是以下两倍的事实A.max():
In [1]: A = arange(10*20*30*40).reshape(10, 20, 30, 40)
In [2]: %timeit A.max()
1000 loops, best of 3: 216 us per loop
In [3]: %timeit A.sum()
10000 loops, best of 3: 119 us per loop
In [4]: %timeit A.any()
1000 loops, best of 3: 217 us per loop
Run Code Online (Sandbox Code Playgroud)
我原本预计A.any()会更快(它应该只检查一个元素!),然后A.max(),这A.sum()将是最慢的(sum()需要添加数字并每次更新一个值,max需要每次比较数字并有时更新,我认为添加应该比比较慢.事实上,情况正好相反.为什么?
max必须存储一个值,不断检查潜在的更新(CPU 需要执行分支操作来实现这些更新)。sum只是搅动价值观。
所以sum会更快。