如何将矩阵的第(j,i)个乘以另一个矩阵中的第i列以在R中生成j个矩阵?

时间:2018-09-13 09:26:29

标签: r matrix

我有两个大小分别为j x i和m x i的矩阵。我想做的是将matrix1的i'j元素与matrix2中的第i列相乘。这将给我一个向量,大小为mx1。当针对matrix1中给定行j的所有i个元素完成此操作时,我想将这些i个向量放到一个尺寸为mxi的矩阵中。对所有j重复一次,以得到j个mxi矩阵

一个示例可能会有所帮助:

a1 <- c(0.5,0.2,0.2)
a2 <- c(0.2,0.8,0.4)
b1 <- c(3,4)
b2 <- c(1,2)

b <- matrix(0, ncol = 2, nrow = 2)
a <- matrix(0, ncol = 2, nrow = 3)

b[,1] <- b1; b[,2] <- b2
a[,1] <- a1; a[,2] <- a2

这里我想将a [,1]与b [1,1]相乘,然后将a [,2]与b [1,2]相乘得到

> new.m.j <- cbind(a[,1]*b[1,1], a[,2]*b[1,2])
> 
> new.m.j
     [,1] [,2]
[1,]  1.5  0.2
[2,]  0.6  0.8
[3,]  0.6  0.4

我想对matrix1中的所有j列执行此操作,以获得j个矩阵的列表。

我显然可以通过循环来做到这一点,这很简单。但是,我试图教自己使用更多的apply(和s / l-apply),而且我很确定您可以通过这种方式解决此问题。

1 个答案:

答案 0 :(得分:0)

请注意,new.m.j就是t(t(a)*b[1,])。然后,您可以在lapply中使用此结构来生成所需的矩阵列表。

lapply(seq(nrow(b)), function(j) t(t(a)*b[j,]))
[[1]]
     [,1] [,2]
[1,]  1.5  0.2
[2,]  0.6  0.8
[3,]  0.6  0.4

[[2]]
     [,1] [,2]
[1,]  2.0  0.4
[2,]  0.8  1.6
[3,]  0.8  0.8