在优化代码的慢速部分时,我感到惊讶的是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()
每次需要比较数字并有时更新,我认为添加应该比比较慢。事实上,情况恰恰相反。为什么呢?
答案 0 :(得分:1)
max
必须存储一个值,不断检查以获取潜在的更新(并且CPU需要执行分支操作来实现这些更新)。 sum
只是为了改变价值观。
所以sum
会更快。