在R中将两个具有不同维度的矩阵相乘

时间:2020-08-17 11:06:44

标签: r matrix apply sapply

我正在尝试使用(s)apply将两个具有不同维度的矩阵相乘。矩阵是:

xx <- matrix(c(1, 2, 3, 4, 5, 6), nrow=2, ncol=3, byrow=T)
yy <- matrix(c(10, 100), nrow=2, ncol=1, byrow=T)

我想要的是将一个矩阵的每一行与另一矩阵的每一行相乘,并获得:

> zz
      [,1]  [,2]  [,3]
[1,]    10    20    30
[2,]   400   500   600

我尝试使用sapply(yy, function(x) xx*x)来生成6x2矩阵,而不是我想要的3x2矩阵。同样,产生6x1矩阵的apply(yy, 2, function(x) xx*x)也不起作用。 在过去的类似情况下,我毫无问题地使用了sapply,所以我不明白为什么现在不行(我总是把头缠在*apply上有点麻烦)。我在做什么错了?

4 个答案:

答案 0 :(得分:5)

通过yyc()转换为向量,乘法时将循环使用xx的尺寸。

xx * c(yy)

#      [,1] [,2] [,3]
# [1,]   10   20   30
# [2,]  400  500  600

或通过矩阵乘法:

diag(c(yy)) %*% xx

答案 1 :(得分:2)

您可以使用sweep

sweep(xx, 1, yy, `*`)

#     [,1] [,2] [,3]
#[1,]   10   20   30
#[2,]  400  500  600

或者使yy的尺寸与xx相同,然后直接相乘:

xx * yy[row(xx),]

答案 2 :(得分:1)

使用apply

apply(xx, 2, function(x) x * yy)

     [,1] [,2] [,3]
[1,]   10   20   30
[2,]  400  500  600

答案 3 :(得分:1)

我们也可以

xx * yy[,1]
#    [,1] [,2] [,3]
#[1,]   10   20   30
#[2,]  400  500  600