python - np.sum 和 np.add.reduce 有什么区别?

标签 python numpy

np.sumnp.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.sumnumpy/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/

相关文章:

python - 理解 python 中的 lambda 函数

python - 具有离散颜色的 2D 数组不适用于一个中间值

numpy - 无法在 Umbraco 中安装软件包

python - 如何修复 numpy 数组的错误维度

python - 使用 python 中的矢量化解决方案计算最大绘制

python - 如何在 Python pandas 中使零除以零结果为零?

python - Flask 大型教程,帖子未显示在/index 中

python - 如何根据特定条件替换列中的某些值?

python - python和 celery : override hard timeouts for use with gevent pool

python - CV2 : numpy. core.multiarray 导入失败的问题