将R中两个不同维数的矩阵相乘

将R中两个不同维数的矩阵相乘,r,matrix,apply,sapply,R,Matrix,Apply,Sapply,我试图使用(s)应用于两个不同维度的矩阵相乘。这些矩阵是: 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) 我尝试了sapply(yy,函数(x)xx*x),它生成一个6x2矩阵,而不是我想要的3x2矩阵。另外,产生6x1矩阵的应用(yy,2,函数(x)xx*x)不起作用。 在过去类似的情况下,我毫无问题地使用了s

我试图使用(s)应用于两个不同维度的矩阵相乘。这些矩阵是:

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)
我尝试了
sapply(yy,函数(x)xx*x)
,它生成一个6x2矩阵,而不是我想要的3x2矩阵。另外,产生6x1矩阵的应用(yy,2,函数(x)xx*x)不起作用。
在过去类似的情况下,我毫无问题地使用了
sapply
,因此我不明白为什么现在不起作用(我总是有点费劲地想
*apply
)。我做错了什么?

您可以使用
sweep

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

#     [,1] [,2] [,3]
#[1,]   10   20   30
#[2,]  400  500  600
或者将
yy
的尺寸与
xx
相同,直接相乘:

xx * yy[row(xx),]

通过
c()
yy
转换为一个向量,相乘时将循环到
xx
的维度

xx * c(yy)

#      [,1] [,2] [,3]
# [1,]   10   20   30
# [2,]  400  500  600
或通过矩阵乘法:

diag(c(yy)) %*% xx
使用
apply

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

     [,1] [,2] [,3]
[1,]   10   20   30
[2,]  400  500  600
我们也可以这样做

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

这是最适合我的解决方案,但其他建议也适用。谢谢
xx * yy[,1]
#    [,1] [,2] [,3]
#[1,]   10   20   30
#[2,]  400  500  600