1

我想做以下但使用PyTorch

下面的例子和描述来自这篇文章

我有一个包含 25 列和 23 行的数字矩阵和一个长度为 25 的向量。如何在不使用 for 循环的情况下将矩阵的每一行乘以向量?

结果应该是一个 25x23 矩阵(与输入大小相同),但每一行都乘以向量。

R 中的示例代码(来源:@hatmatrix 答案中的可重现示例):

matrix <- matrix(rep(1:3,each=5),nrow=3,ncol=5,byrow=TRUE)

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3

vector <- 1:5

期望的输出:

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    2    4    6    8   10
[3,]    3    6    9   12   15

使用 Pytorch 执行此操作的最佳方法是什么?

4

1 回答 1

3

答案是如此微不足道,以至于我忽略了它。

为简单起见,我在此答案中使用了较小的向量和矩阵。

将矩阵的行乘以向量:

X = torch.tensor([[1,2,3],[5,6,7]])                                                                                                                                                                          
y = torch.tensor([7,4])                                                                                                                                                                                   
X.transpose(0,1)*y
# or alternatively
y*X.transpose(0,1)

输出:

tensor([[ 7, 20],
        [14, 24],
        [21, 28]])

tensor([[ 7, 20],
        [14, 24],
        [21, 28]])

将矩阵的列乘以向量:

要将矩阵的列乘以向量,您可以使用相同的运算符 '*' 但无需先转置矩阵(或向量)

X = torch.tensor([[3, 5],[5, 5],[1, 0]])                                                                                                                                                                          
y = torch.tensor([7,4])                                                                                                                                                                                   
X*y
# or alternatively
y*X

输出:

tensor([[21, 20],
        [35, 20],
        [ 7,  0]])

tensor([[21, 20],
        [35, 20],
        [ 7,  0]])
于 2019-09-15T20:03:40.580 回答