在R中将两个具有不同维度的矩阵相乘
Multiply two matrices with different dimensions in R
我正在尝试使用 (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
时遇到一些麻烦)。我做错了什么?
您可以使用 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
我正在尝试使用 (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
时遇到一些麻烦)。我做错了什么?
您可以使用 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