我有两个大小分别为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),而且我很确定您可以通过这种方式解决此问题。
答案 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