为什么.sum()比.any()或.max()更快?

时间:2014-03-13 22:18:16

标签: python numpy

在优化代码的慢速部分时,我感到惊讶的是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

我曾预计A.any()会更快(它应该只检查一个元素!),然后是A.max(),而A.sum()将是最慢的({{ 1}}每次需要添加数字并更新值,sum()每次需要比较数字并有时更新,我认为添加应该比比较慢。事实上,情况恰恰相反。为什么呢?

1 个答案:

答案 0 :(得分:1)

max必须存储一个值,不断检查以获取潜在的更新(并且CPU需要执行分支操作来实现这些更新)。 sum只是为了改变价值观。

所以sum会更快。