我正在尝试使用(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
上有点麻烦)。我在做什么错了?
答案 0 :(得分:5)
通过yy
将c()
转换为向量,乘法时将循环使用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