r - 如何将矩阵的第 (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),我很确定你可以通过这种方式解决这个问题。
解决方案
请注意,这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
推荐阅读
- xcode - 构建未显示在 App Store Connect 中 - 未收到任何状态电子邮件
- arm - 如何在运行时处理 SD 卡的移除和添加?
- java - 错误:java.lang.NoClassDefFoundError: org/apache/commons/collections/map/LRUMap
- elixir - Elixir - 在 Mac 上设置 MIX_ENV 会产生 FunctionClauseError
- postgresql - 关联表中的 gorm many2many 和附加字段
- excel - 将现有 Excel 工作簿中的特定表导入 Access
- r - menuitem 下的 SelectInput 不起作用
- postgresql - Postgres复制以将数据插入表中
- javascript - 使用正则表达式匹配和分组字符串的相同部分两次?
- python-3.x - 为什么每次我在 Python 中运行 spark 代码时都会出现这些警告