R中矩阵的乘法

Multiplication of matrix in R

我有以下问题:

w <- matrix(1:3,nrow=3,ncol=1)

mymat <- as.matrix(cbind(a = 6:15, b = 16:25, c= 26:35))

mymat

      a  b  c
 [1,]  6 16 26
 [2,]  7 17 27
 [3,]  8 18 28
 [4,]  9 19 29
 [5,] 10 20 30
 [6,] 11 21 31
 [7,] 12 22 32
 [8,] 13 23 33
 [9,] 14 24 34
[10,] 15 25 35

我想在与 mymat 大小相同的矩阵中获得以下结果:

       a  b  c
 [1,]  6*1 16*2 26*3
 [2,]  7*1 17*2 27*3
 [3,]  8*1 18*2 28*3
 ...

我已经尝试了 lappy 功能,但我无法获得我想要的结果。谢谢!

1) diag Post 将其乘以适当的对角矩阵。我们可以省略 c(),但如果 w 是向量而不是矩阵,它不会造成伤害。

mymat %*% diag(c(w))

2) KhatriRao 我们可以交替使用 KhatriRao 产品。如果 w 是问题中定义的 w,则 matrix 可以选择性地省略,但我们将其包括在内以防 w 实际上是一个向量。请注意,Matrix 包随 R 一起提供,因此不必安装。

library(Matrix)
KhatriRao(mymat, t(matrix(w)))

3) mapply

mapply(`*`, as.data.frame(mymat), w)

使用sweep():

sweep(mymat, 2, w, "*")

w转换为相同维度的矩阵:

mymat * t(w)[rep(1, NROW(mymat)), ]

我们也可以使用 col 来复制值,然后乘以 base R

mymat * w[col(mymat)]