torch.matmul#
- torch.matmul(input,other,*,out=None)→Tensor#
Matrix product of two tensors.
The behavior depends on the dimensionality of the tensors as follows:
If both tensors are 1-dimensional, the dot product (scalar) is returned.
If both arguments are 2-dimensional, the matrix-matrix product is returned.
If the first argument is 1-dimensional and the second argument is 2-dimensional,a 1 is prepended to its dimension for the purpose of the matrix multiply.After the matrix multiply, the prepended dimension is removed.
If the first argument is 2-dimensional and the second argument is 1-dimensional,the matrix-vector product is returned.
If both arguments are at least 1-dimensional and at least one argument isN-dimensional (where N > 2), then a batched matrix multiply is returned. If the firstargument is 1-dimensional, a 1 is prepended to its dimension for the purpose of thebatched matrix multiply and removed after. If the second argument is 1-dimensional, a1 is appended to its dimension for the purpose of the batched matrix multiply and removed after.
The first N-2 dimensions of each argument, the batch dimensions, arebroadcast (and thus must be broadcastable).The last 2, the matrix dimensions, are handled as in the matrix-matrix product.
For example, if
inputis a tensor andotheris atensor, the batch dimensions are and,and the matrix dimensions are and.outwill be a tensor.
This operation has support for arguments withsparse layouts. In particular thematrix-matrix (both arguments 2-dimensional) supports sparse arguments with the same restrictionsas
torch.mm()Warning
Sparse support is a beta feature and some layout(s)/dtype/device combinations may not be supported,or may not have autograd support. If you notice missing functionality pleaseopen a feature request.
This operator supportsTensorFloat32.
On certain ROCm devices, when using float16 inputs this module will usedifferent precision for backward.
Note
The 1-dimensional dot product version of this function does not support an
outparameter.- Parameters:
- Keyword Arguments:
out (Tensor,optional) – the output tensor.
Example:
>>># vector x vector>>>tensor1=torch.randn(3)>>>tensor2=torch.randn(3)>>>torch.matmul(tensor1,tensor2).size()torch.Size([])>>># matrix x vector>>>tensor1=torch.randn(3,4)>>>tensor2=torch.randn(4)>>>torch.matmul(tensor1,tensor2).size()torch.Size([3])>>># batched matrix x broadcasted vector>>>tensor1=torch.randn(10,3,4)>>>tensor2=torch.randn(4)>>>torch.matmul(tensor1,tensor2).size()torch.Size([10, 3])>>># batched matrix x batched matrix>>>tensor1=torch.randn(10,3,4)>>>tensor2=torch.randn(10,4,5)>>>torch.matmul(tensor1,tensor2).size()torch.Size([10, 3, 5])>>># batched matrix x broadcasted matrix>>>tensor1=torch.randn(10,3,4)>>>tensor2=torch.randn(4,5)>>>torch.matmul(tensor1,tensor2).size()torch.Size([10, 3, 5])