首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >np.sum和np.add.reduce有什么区别?

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

Stack Overflow用户
提问于 2013-05-07 21:17:05
回答 3查看 18.2K关注 0票数 30

np.sumnp.add.reduce之间的区别是什么

虽然the docs非常明确:

例如,add.reduce()等同于

()。

两者的性能似乎有很大的不同:对于相对较小的数组大小,add.reduce的速度大约快两倍。

代码语言:javascript
复制
$ 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

对于更大的数组大小,差异似乎消失了:

代码语言:javascript
复制
$ 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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-07 22:13:02

简而言之:当参数是numpy数组时,np.sum最终调用add.reduce来完成这项工作。处理它的参数和分派到add.reduce的开销是np.sum速度较慢的原因。

更长的答案:np.sum是在numpy/core/fromnumeric.py中定义的。在np.sum的定义中,您将看到工作被传递给_methods._sum。在_methods.py中,该函数很简单:

代码语言:javascript
复制
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的模块。

票数 30
EN

Stack Overflow用户

发布于 2018-01-30 15:37:24

如果你盲目地从一个重构到另一个,实际上有一个差异可能会咬你一口:

代码语言:javascript
复制
>>> import numpy as np
>>> a = np.arange(4).reshape(2, 2)
>>> 
>>> np.sum(a)
6
>>> np.add.reduce(a)
array([2, 4])
>>> 

axis默认值不同!

票数 16
EN

Stack Overflow用户

发布于 2021-07-09 16:11:54

要回答标题中的问题,简单地说:在处理矩阵时,您将发现这两个函数之间的重要区别:

np.sum (不指定轴)将返回矩阵中所有元素的总和。

np.add.reduce (不指定轴)将沿着axis=0返回总和。也就是说,add.reduce(a)等价于sum(a,axis=0)

但是,如果指定轴,则两者返回的值相同。我张贴作为答案,因为我没有足够的代表来评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16420097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档