我正在尝试将矩阵的每一行乘以另一个矩阵的列。例如:
mat1 <- matrix(rnorm(10), nrow=5, ncol=2)
mat2 <- matrix(rnorm(5), nrow=5)
我想用mat2乘以mat1的每一行。所需的输出形状为5 * 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