【问题标题】:Multiply matrix rows by element row of vector将矩阵行乘以向量的元素行
【发布时间】:2018-04-04 19:23:14
【问题描述】:

假设我有一个2x2 矩阵,我想将每一行与2x1 向量中的同一行元素相乘。我怎样才能在 R 中做到这一点?

示例:

w1 <- matrix(c(0,1, 2, 3), ncol = 2)
v1 <- matrix(c(0, 6), ncol = 1)

乘法

[ (0 * 0), (2 * 0) ] = [0, 0]

[ (1 * 6), (3 * 6) ] = [6, 18]

期望的输出

     [,1] [,2]
[1,]    0    0
[2,]    6   18

【问题讨论】:

  • 您也可以像这样使用sweepsweep(w1, MARGIN=1, STATS=v1, FUN="*"),但保持 V1 作为向量并使用逐元素乘法是可行的方法。

标签: r matrix


【解决方案1】:

如果您将向量表示为向量而不是矩阵,则可以:

m <- matrix(c(0,1,2,3), nrow = 2)
v <- matrix(c(0, 6), nrow = 2)

> m*as.vector(v)
     [,1] [,2]
[1,]    0    0
[2,]    6   18

或者,从一开始就将其称为向量:

m <- matrix(c(0,1,2,3), nrow = 2)
v <- c(0,6)

> m*v
     [,1] [,2]
[1,]    0    0
[2,]    6   18

【讨论】:

    【解决方案2】:

    只需使用apply:

    w1 <- matrix(c(0,1, 2, 3), ncol = 2)
    v1 <- matrix(c(0, 6), ncol = 1)
    
    apply(w1, 2, `*`, v1)
    

    第二个参数告诉applyw1 的每一列上使用函数*v1* 的参数。

    【讨论】:

    • 谢谢,就这么简单。我想知道是否有矩阵乘法运算,但这也有效。
    • 对于我们从线性代数中知道的矩阵乘法,使用%*%
    【解决方案3】:

    一个选项是:

    w1 <- matrix(c(0,1, 2, 3), ncol = 2)
    v1 <- matrix(c(0, 6), ncol = 1)
    w1*v1[,1]
    #       [,1] [,2]
    # [1,]    0    0
    # [2,]    6   18
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-16
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多