I have a batch of lists of vectors
[[v_11, v_12, …, v_1n], [v_21, v_22, …, v_2n], …]
and a list of matrices
[M_1, M_2, …, M_n]
and I want to compute the product
[[M_1 v_11, M_2 v_12, …, M_n v_1n], [M_1 v_21, M_2 v_22, …, M_n v_2n], …].
Is there a vectorized way to do this?
You could try using torch.stack
to convert your list of vectors and list of matrices into 2 different Tensors. Then just apply @
or torch.einsum
to perform the matrix multiplication.
import torch
list1 = [torch.randn(5) for _ in range(10)]
list2 = [torch.randn(5) for _ in range(10)]
matrix1 = [torch.randn(5,5) for _ in range(10)]
list1tensor = torch.stack(list1, dim=0)
list2tensor = torch.stack(list2, dim=0)
matrix1tensor = torch.stack(matrix1, dim=0)
mv1 = torch.einsum("bij,bj->bi",matrix1tensor, list1tensor)
mv2 = torch.einsum("bij,bj->bi",matrix1tensor, list2tensor)