首页 > 解决方案 > 如何将矩阵的第 (j,i)'th 与另一个矩阵中的第 i 列相乘以在 R 中生成 j 个矩阵?

问题描述

我有两个大小为 jxi 和 mx 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),我很确定你可以通过这种方式解决这个问题。

标签: rmatrix

解决方案


请注意,这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

推荐阅读