np.sum
和np.add.reduce
有什么区别?
而the docs非常明确:
For example, add.reduce() is equivalent to sum().
两者的性能似乎完全不同:对于相对较小的数组大小,add.reduce
大约快两倍。
$ python -mtimeit -s"import numpy as np; a = np.random.rand(100); summ=np.sum" "summ(a)"
100000 loops, best of 3: 2.11 usec per loop
$ python -mtimeit -s"import numpy as np; a = np.random.rand(100); summ=np.add.reduce" "summ(a)"
1000000 loops, best of 3: 0.81 usec per loop
$ python -mtimeit -s"import numpy as np; a = np.random.rand(1000); summ=np.sum" "summ(a)"
100000 loops, best of 3: 2.78 usec per loop
$ python -mtimeit -s"import numpy as np; a = np.random.rand(1000); summ=np.add.reduce" "summ(a)"
1000000 loops, best of 3: 1.5 usec per loop
对于更大的数组大小,差异似乎消失了:
$ python -mtimeit -s"import numpy as np; a = np.random.rand(10000); summ=np.sum" "summ(a)"
100000 loops, best of 3: 10.7 usec per loop
$ python -mtimeit -s"import numpy as np; a = np.random.rand(10000); summ=np.add.reduce" "summ(a)"
100000 loops, best of 3: 9.2 usec per loop
最佳答案
简短回答:当参数是一个 numpy 数组时,np.sum
最终会调用 add.reduce
来完成这项工作。处理其参数和调度到 add.reduce
的开销是 np.sum
较慢的原因。
更长的答案:
np.sum
在 numpy/core/fromnumeric.py
中定义.在 np.sum
的定义中,您将
看到工作被传递给 _methods._sum
。那个函数,在 _methods.py
, 很简单:
def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
return um.add.reduce(a, axis=axis, dtype=dtype,
out=out, keepdims=keepdims)
um
是定义 add
ufunc 的模块。
关于python - np.sum 和 np.add.reduce 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16420097/