In PyTorch, element-wise matrix multiplication (the Hadamard product) is a binary operation that takes in two matrices of the same dimensions and returns a matrix of the multiplied corresponding elements.

This operation can be thought of as a “naive matrix multiplication” and is different from the matrix product. The element-wise matrix multiplication is associative and distributive. Unlike the matrix product, it is also commutative.

For two matrices A and B of the same dimension m × n, the element-wise matrix multiplication A ⊙ B is a matrix of the same dimension as the operands, with elements given. For example, the element-wise matrix multiplication for two arbitrary 3 × 3 matrices is:

For matrices of different dimensions (m × n and p × q, where mp or q), the element-wise matrix multiplication is undefined. Given two tensors `x` and `y`, you can simply use `x * y` or `torch.mul(x, y)`.

``````import torch

x = torch.tensor([[4,1,5],
[5,3,7],
[8,4,2]])

y = torch.tensor([[2,3,7],
[4,9,1],
[2,7,3]])

torch.mul(x, y)

x * y``````
###### Result:
``````tensor([[ 8,  3, 35],
[20, 27,  7],
[16, 28,  6]])``````

The @ operator performs matrix multiplication. If A and B are NumPy arrays, then A @ B is equivalent to np.matmul(A, B). Many other libraries, like TensorFlow, and PyTorch, support the @ operator as well. However, you cannot use @ on pure Python arrays (i.e., lists of lists).

### Related Post

PyTorch Matrix Multiplication from Scratch