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 1dimensional, the dot product (scalar) is returned.
If both arguments are 2dimensional, the matrixmatrix product is returned.
If the first argument is 1dimensional and the second argument is 2dimensional, 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 2dimensional and the second argument is 1dimensional, the matrixvector product is returned.
If both arguments are at least 1dimensional and at least one argument is Ndimensional (where N > 2), then a batched matrix multiply is returned. If the first argument is 1dimensional, a 1 is prepended to its dimension for the purpose of the batched matrix multiply and removed after. If the second argument is 1dimensional, a 1 is appended to its dimension for the purpose of the batched matrix multiple and removed after. The nonmatrix (i.e. batch) dimensions are broadcasted (and thus must be broadcastable). For example, if
input
is a $(j \times 1 \times n \times n)$ tensor andother
is a $(k \times n \times n)$ tensor,out
will be a $(j \times k \times n \times n)$ tensor.Note that the broadcasting logic only looks at the batch dimensions when determining if the inputs are broadcastable, and not the matrix dimensions. For example, if
input
is a $(j \times 1 \times n \times m)$ tensor andother
is a $(k \times m \times p)$ tensor, these inputs are valid for broadcasting even though the final two dimensions (i.e. the matrix dimensions) are different.out
will be a $(j \times k \times n \times p)$ tensor.
This operator supports TensorFloat32.
Note
The 1dimensional dot product version of this function does not support an
out
parameter. 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])