gpt4 book ai didi

numpy - "numpy.add(a,b)"和 "a+b"有什么区别?

转载 作者:行者123 更新时间:2023-12-05 00:55:06 29 4
gpt4 key购买 nike

numpy.add(a,b)有什么区别吗和 a+b添加两个 ndarray a 和 b 时?
文档说 numpy.add"Equivalent to x1 + x2 in terms of array broadcasting." .
但我不明白这意味着什么,因为 numpy.add(numpy.array([1,2,3]),4)也有效。

最佳答案

在 Python 语法中,a+b翻译成 a.__add__(b) . a.__add__是一种为 a 类型的对象实现加法的方法.数字有这样的方法,列表也有( [1,3]+[4] )和字符串( 'abc'+'d' )。
numpy已实现 __add__ (和其他标准 __... 方法)为其 ndarray类(至少对于数字 dtypes )。

这就是所有标准 Python 和 numpy并且永远存在。
np.addufunc .查看它的文档 - 参见 out参数,以及 Binary ufuncs:部分。它是一个函数,有一些方法,如 reduce , reduceata.__add__ (和 + )没有。

如果你有两个数组或数字并且你想对它们求和,自然的做法是使用 + , a+b . np.add在某些特殊情况下很有用

例如,比较两个列表会发生什么:

In [16]: [1,2,3]+[4]
Out[16]: [1, 2, 3, 4] # default list concatenation
In [17]: np.add([1,2,3],[4])
Out[17]: array([5, 6, 7]) # convert lists to arrays and sum

或使用 2d 广播的示例:
In [19]: np.add([[1],[2],[3]],[4,1])
Out[19]:
array([[5, 2],
[6, 3],
[7, 4]])
In [20]: np.array([1,2,3])[:,None]+np.array([4,1])
Out[20]:
array([[5, 2],
[6, 3],
[7, 4]])

还有你的例子:
In [21]: numpy.add(numpy.array([1,2,3]),4)
Out[21]: array([5, 6, 7])
In [22]: numpy.array([1,2,3])+4
Out[22]: array([5, 6, 7])

“就阵列广播而言,相当于 x1 + x2。”意味着,他们都工作并做同样的事情。
broadcasting是另一个主题。

==================
@运算符和 np.matmul平行并不完全相同。 @运算符是 Python 解释器的最新成员。它被转换为对 __matmul__ 的调用。方法 - 如果定义。新品 numpy版本有这样的定义。但是该方法不是为 Python 数字或列表定义的。还有一个功能版本, np.matmul ,引用相同的代码。还有一个 x.dotnp.dot配对,但没有 Python 识别的运算符或 x.__dot__ .

关于numpy - "numpy.add(a,b)"和 "a+b"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38747612/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com