【问题标题】:Difference Between ADD and SUM in PythonPython中ADD和SUM的区别
【发布时间】:2018-12-20 11:41:19
【问题描述】:

给定两个二维数组时的SUM函数结果说明

当我在 Spyder IDE 中运行代码时,Sum 函数和 numpy.add 函数显示不同的结果。当我们为 sum 函数中的两个参数而不是数组和一个数字给出两个二维数组时,谁能帮我理解“SUM”函数输出是如何出现的。谢谢你

import numpy as np

x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)

print(x)
print(y)
print (x+y)    
print(sum(x,y))
print(np.add(x,y))




        Output
[[1. 2.]
 [3. 4.]]
[[5. 6.]
 [7. 8.]]
[[ 6.  8.]
 [10. 12.]]
[[ 9. 12.]
 [11. 14.]]
[[ 6.  8.]
 [10. 12.]]

【问题讨论】:

    标签: python-3.x numpy sum add


    【解决方案1】:

    在 Numpy 中,+ 运算符被定义为逐元素加法,实际上是 equivalent 到 np.add(...)。

    sum(iterable, [start]) 内置函数

    从左到右对start 和一个iterable 的项目求和并返回总数。 start 默认为 0。

    因此,如果只给定一个矩阵,它将执行逐列求和。如果给定第二个参数,它将(按元素)加到总和中。所以一些较小的例子可能是

    sum(x)
    > array([4., 6.])
    # i.e. [(1+3), (2+4)]
    
    sum(x, 1)
    > array([5., 7.])
    # i.e. [(1+1+3), (1+2+4)]
    
    sum(y)
    > array([12., 14.])
    # i.e. [(5+7), (6+8)]
    
    sum(x, sum(y))
    > array([16., 20.])
    # i.e. [((5+7)+1+3), ((6+8)+2+4)]
    
    sum(x, y)
    > array([[ 9., 12.],
             [11., 14.]])
    # i.e. [[(5+1+3), (6+2+4)],
    #       [(7+1+3), (8+2+4)]]
    

    最后一个sum() 执行x 的逐列求和,然后将结果与共享列的y 的每个元素相加。用Numpy写的,相当于

    sum(x, y) == x.sum(axis=0) + y
    

    【讨论】:

    • 我从未使用过 sum() 函数。它有有趣的行为。我没有看到用途(出于我的目的)。别人怎么用?
    • 它是一个内置类型,旨在对 list 这样的内置类型求和。例如,如果您有一个数字列表L,您可以获得其总和sum(L),而不是实例化一个变量并循环遍历每个元素。
    • 也就是说,如果你正在使用 Numpy,最好使用 Numpy 的函数。几乎所有的低级方法(尤其是.add())都经过了高度优化,并且在CuPy 等库中有姐妹方法。
    • 好的,这是有道理的。我用 Numpy 做大部分的“重数学”。事后看来,我可能在整数列表中使用了sum(),但没有使用 ndarrays(当然也没有使用成对的 ndarrays)。很高兴知道。
    • 具有讽刺意味的是,我今天不得不对字典中的值进行求和...这是一个及时的提醒(以及另一个显示如何做到这一点的 SO 帖子)。
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2015-02-23
    相关资源
    最近更新 更多