【问题标题】:Multiply rows of matrix by vector elementwise in pytorch?在pytorch中将矩阵行乘以向量元素?
【发布时间】:2020-01-16 18:03:25
【问题描述】:

我想执行以下操作,但使用 PyTorch

下面的例子和描述来自这个post

我有一个 25 列和 23 行的数字矩阵,以及一个向量 长度 25. 如何将矩阵的每一行乘以向量 不使用 for 循环?

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

R 中的示例代码(来源:reproducible example from @hatmatrix's answer):

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 执行此操作的最佳方法是什么?

【问题讨论】:

    标签: python pytorch vector-multiplication


    【解决方案1】:

    答案太琐碎了,我忽略了它。

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

    矩阵的行乘以向量:

    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]])
    

    【讨论】:

    • 这会将向量的值乘以矩阵的列,而不是行。
    • @Visionscaper 感谢您指出这一点。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多