如何解决在R中将两个具有不同维度的矩阵相乘
我正在尝试使用(s)apply将两个具有不同维度的矩阵相乘。矩阵是:
xx <- matrix(c(1,2,3,4,5,6),nrow=2,ncol=3,byrow=T)
yy <- matrix(c(10,100),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,function(x) xx*x)
也不起作用。
在过去的类似情况下,我毫无问题地使用了sapply
,所以我不明白为什么现在不行(我总是把头缠在*apply
上有点麻烦)。我在做什么错了?
解决方法
通过yy
将c()
转换为向量,乘法时将循环使用xx
的尺寸。
xx * c(yy)
# [,1] [,2] [,3]
# [1,] 10 20 30
# [2,] 400 500 600
或通过矩阵乘法:
diag(c(yy)) %*% xx
,
您可以使用sweep
:
sweep(xx,1,yy,`*`)
# [,3]
#[1,] 10 20 30
#[2,] 400 500 600
或者使yy
的尺寸与xx
相同,然后直接相乘:
xx * yy[row(xx),]
,
使用apply
apply(xx,2,function(x) x * yy)
[,3]
[1,] 10 20 30
[2,] 400 500 600
,
我们也可以
xx * yy[,1]
# [,] 400 500 600
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。