numpy.matmul¶
-
numpy.
matmul
(a, b, out=None)¶ 两个数组的矩阵乘积。
行为取决于参数以下面的方式。
- 如果两个参数都是2-D,则它们像常规矩阵一样相乘。
- 如果任一参数是N-D,N> 2,则将其视为存在于最后两个索引中的矩阵的堆栈并且相应地进行广播。
- 如果第一个参数是1-D,则通过在其维度前面添加1来将其提升为矩阵。在矩阵乘法之后,去除前缀1。
- 如果第二个参数是1-D,则通过向其维度添加1来将其提升为矩阵。在矩阵乘法之后,去除附加的1。
不允许乘以标量乘法,请改用
*
。注意,将一堆矩阵乘以一个向量将产生一个向量栈,但是matmul不会这样认出它。matmul
与两个重要方面不同于dot
。- 不允许乘以标量乘法。
- 矩阵的栈被一起广播,如同矩阵是元素一样。
警告
此功能是初步的,包括在Numpy 1.10中用于测试和文档。它的语义不会改变,但可选参数的数量和顺序将会改变。
版本1.10.0中的新功能。
参数: a:array_like
第一个参数。
b:array_like
第二个参数。
out:ndarray,可选
输出参数。这必须有返回的确切的类型,如果没有使用。特别地,它必须具有正确的类型,必须是C连续的,并且其dtype必须是将为dot(a,b)返回的dtype。这是一个性能特性。因此,如果不满足这些条件,则引发异常,而不是试图灵活。
返回: 输出:ndarray
返回a和b的点积。如果a和b都是1-D数组,则返回标量;否则返回一个数组。如果给出out,则返回。
上升: ValueError
如果a的最后一个尺寸与b的倒数第二个尺寸不同。
如果标量值被传递。
笔记
matmul函数实现了在PEP465之后的Python 3.5中引入的@运算符的语义。
例子
对于2-D数组,它是矩阵积:
>>> a = [[1, 0], [0, 1]] >>> b = [[4, 1], [2, 2]] >>> np.matmul(a, b) array([[4, 1], [2, 2]])
对于与1-D混合的2-D,结果是通常的。
>>> a = [[1, 0], [0, 1]] >>> b = [1, 2] >>> np.matmul(a, b) array([1, 2]) >>> np.matmul(b, a) array([1, 2])
广播对于数组的栈是常规的
>>> a = np.arange(2*2*4).reshape((2,2,4)) >>> b = np.arange(2*2*4).reshape((2,4,2)) >>> np.matmul(a,b).shape (2, 2, 2) >>> np.matmul(a,b)[0,1,1] 98 >>> sum(a[0,1,:] * b[0,:,1]) 98
Vector,vector返回标量内积,但两个参数都不是复共轭:
>>> np.matmul([2j, 3j], [2j, 3j]) (-13+0j)
标量乘法会引发错误。
>>> np.matmul([1,2], 3) Traceback (most recent call last): ... ValueError: Scalar operands are not allowed, use '*' instead