numpy.matmul

原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html

译者:飞龙 UsyiyiCN

校对:(虚位以待)

numpy.matmul(a, b, out=None)

两个数组的矩阵乘积。

行为取决于参数以下面的方式。

不允许乘以标量乘法,请改用*注意,将一堆矩阵乘以一个向量将产生一个向量栈,但是matmul不会这样认出它。

matmul与两个重要方面不同于dot

警告

此功能是初步的,包括在Numpy 1.10中用于测试和文档。它的语义不会改变,但可选参数的数量和顺序将会改变。

版本1.10.0中的新功能。

参数:

a:array_like

第一个参数。

b:array_like

第二个参数。

out:ndarray,可选

输出参数。这必须有返回的确切的类型,如果没有使用。特别地,它必须具有正确的类型,必须是C连续的,并且其dtype必须是将为dot(a,b)返回的dtype。这是一个性能特性。因此,如果不满足这些条件,则引发异常,而不是试图灵活。

返回:

输出:ndarray

返回ab的点积。如果ab都是1-D数组,则返回标量;否则返回一个数组。如果给出out,则返回。

上升:

ValueError

如果a的最后一个尺寸与b的倒数第二个尺寸不同。

如果标量值被传递。

也可以看看

vdot
复共轭点积。
tensordot
任意轴上的和。
einsum
爱因斯坦求和约定。
dot
具有不同广播规则的替代矩阵产品。

笔记

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