"numpy.add(a,b)" 和 "a+b" 有什么区别?
What's the difference between "numpy.add(a,b)" and "a+b"?
numpy.add(a,b)
和a+b
在添加两个ndarrays a和b时有什么区别吗?
文档说 numpy.add
是 "Equivalent to x1 + x2 in terms of array broadcasting."。
但我不明白这意味着什么,因为 numpy.add(numpy.array([1,2,3]),4)
也有效。
我相信 add()
是第一个,图书馆改进并获得了正常的数学运算符。
顺便说一句,我们现在用 Python 3.5 和 numpy 见证了同样的事情,其中矩阵乘法可以由运算符 @
执行。在此之前,matrix mult of arrays只能通过数组的dot()
方法来完成。
广播意味着能够在不同大小的数组之间执行操作,例如将一个数字添加到整个数组。这也适用于数组上的运算符。
向数组添加一个数字只是广播能力的一个小例子。您可以在 Broadcasting 中阅读更多相关信息
这是一个非常酷的功能,可以节省内存和编码,但在第一次阅读时并不那么容易理解。
在Python语法中,a+b
被翻译成a.__add__(b)
。 a.__add__
是对a
类型的对象实现加法的方法。数字有这样的方法,列表也有([1,3]+[4]
),字符串也有('abc'+'d'
)。
numpy
已为其 ndarray
class(至少对于数字 dtypes
).
这就是标准 Python 和 numpy
,并且一直存在。
np.add
是一个 ufunc
。查看它的文档 - 查看 out
参数和 Binary ufuncs:
部分。它是一个函数,并且有一些 reduce
、reduceat
等 a.__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
或使用二维广播的示例:
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])
"Equivalent to x1 + x2 in terms of array broadcasting." 意思是,他们都工作并且做同样的事情。
broadcasting
是另一个主题。
==================
@
运算符和 np.matmul
并行并不完全相同。 @
运算符是最近添加到 Python 解释器中的。它被转换为对 __matmul__
方法的调用 - 如果已定义。新 numpy
版本有这样的定义。但是该方法没有为 Python 数字或列表定义。还有一个函数版本,np.matmul
,引用相同的代码。还有一个 x.dot
和 np.dot
配对,但没有 Python 可识别的运算符或 x.__dot__
.
numpy.add(a,b)
和a+b
在添加两个ndarrays a和b时有什么区别吗?
文档说 numpy.add
是 "Equivalent to x1 + x2 in terms of array broadcasting."。
但我不明白这意味着什么,因为 numpy.add(numpy.array([1,2,3]),4)
也有效。
我相信 add()
是第一个,图书馆改进并获得了正常的数学运算符。
顺便说一句,我们现在用 Python 3.5 和 numpy 见证了同样的事情,其中矩阵乘法可以由运算符 @
执行。在此之前,matrix mult of arrays只能通过数组的dot()
方法来完成。
广播意味着能够在不同大小的数组之间执行操作,例如将一个数字添加到整个数组。这也适用于数组上的运算符。
向数组添加一个数字只是广播能力的一个小例子。您可以在 Broadcasting 中阅读更多相关信息 这是一个非常酷的功能,可以节省内存和编码,但在第一次阅读时并不那么容易理解。
在Python语法中,a+b
被翻译成a.__add__(b)
。 a.__add__
是对a
类型的对象实现加法的方法。数字有这样的方法,列表也有([1,3]+[4]
),字符串也有('abc'+'d'
)。
numpy
已为其 ndarray
class(至少对于数字 dtypes
).
这就是标准 Python 和 numpy
,并且一直存在。
np.add
是一个 ufunc
。查看它的文档 - 查看 out
参数和 Binary ufuncs:
部分。它是一个函数,并且有一些 reduce
、reduceat
等 a.__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
或使用二维广播的示例:
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])
"Equivalent to x1 + x2 in terms of array broadcasting." 意思是,他们都工作并且做同样的事情。
broadcasting
是另一个主题。
==================
@
运算符和 np.matmul
并行并不完全相同。 @
运算符是最近添加到 Python 解释器中的。它被转换为对 __matmul__
方法的调用 - 如果已定义。新 numpy
版本有这样的定义。但是该方法没有为 Python 数字或列表定义。还有一个函数版本,np.matmul
,引用相同的代码。还有一个 x.dot
和 np.dot
配对,但没有 Python 可识别的运算符或 x.__dot__
.