r中的矩阵乘法

时间:2012-03-15 21:50:25

标签: r matrix multiplication

我正在尝试将矩阵的每一行乘以另一个矩阵的列。例如:

mat1 <- matrix(rnorm(10), nrow=5, ncol=2)
mat2 <- matrix(rnorm(5), nrow=5)

我想用mat2乘以mat1的每一行。所需的输出形状为5 * 2。

2 个答案:

答案 0 :(得分:5)

您可以使用apply() mat1 的每一列乘以 mat2 。 ("*"将执行R通常向量化的两个等长向量的逐元素乘法。

apply(mat1, 2, "*", mat2)
           [,1]       [,2]
[1,]  0.1785476  0.4175557
[2,]  0.2644247 -0.3745997
[3,] -0.5328542  0.8945527
[4,] -2.7351502 -0.7715341
[5,] -0.9719129 -0.1346929

或者更好的是,将mat1转换为向量以利用R的回收规则:

mat2 <- matrix(1:10, ncol=2)
mat1 <- matrix(1:5, ncol=1)

as.vector(mat1)*mat2
     [,1] [,2]
[1,]    1    6
[2,]    4   14
[3,]    9   24
[4,]   16   36
[5,]   25   50

答案 1 :(得分:1)

你的第一个矩阵有五行两列;你的第二个矩阵有五行一列。如果它们具有相同的行数,而第二行总是有一列,则可以执行

mat1 * rep(mat2,ncol(mat1))
           [,1]        [,2]
[1,] -0.2327958  0.76093047
[2,] -0.3636661 -0.18991299
[3,] -0.8729468  0.58214118
[4,]  0.8017349 -0.59781909
[5,] -0.2230380 -0.08296606

如果mat1实际上其行中的元素与mat2在其单个列中的数量相同(正如您的建议所示),则可以稍微调整一下

mat1 <- matrix(rnorm(10), nrow=2, ncol=5)
mat2 <- matrix(rnorm(5), nrow=5, ncol=1)
mat1 * rep(mat2,nrow(mat1))
            [,1]        [,2]       [,3]        [,4]       [,5]
[1,] -0.19818805 -0.05938007 -1.7792597  0.06937307 -0.7193403
[2,] -0.05087793  0.10781853  0.2243285 -0.11416273  2.4063926

或莎拉的版本

mat1 <- matrix(rnorm(10), nrow=5, ncol=2)
mat2 <- matrix(rnorm(2), nrow=2, ncol=1)
mat1 * rep(mat2,nrow(mat1))
           [,1]        [,2]
[1,]  0.1528393  0.68646359
[2,]  0.2420454  0.22987250
[3,] -0.2592124 -0.07626098
[4,]  0.4431273  0.27320838
[5,] -0.1698307  0.47578667