gpt4 book ai didi

r - 在 R 中使用 apply() 对三个矩阵列表进行矩阵乘法?

转载 作者:行者123 更新时间:2023-12-04 09:31:57 25 4
gpt4 key购买 nike

我正在尝试使用 apply() 或类似方法对三个矩阵列表进行矩阵乘法。

以下是示例数据:

mat1 <- matrix(c(1:16), 4, 4, byrow = TRUE)
mat2 <- matrix(c(1:16), 4, 4, byrow = TRUE)
mat3 <- matrix(c(1:16), 4, 4, byrow = TRUE)

l1 <- list(mat1, mat2, mat3)
l2 <- list(mat1, mat2, mat3)
l3 <- list(mat1, mat2, mat3)

对于所有三个列表中的每个相应 [[n]],我想执行以下操作并将它们转储到一个新列表中:
l1[[1]] %*% l2[[1]] %*% l3[[1]]
l1[[2]] %*% l2[[2]] %*% l3[[2]]
l1[[3]] %*% l2[[3]] %*% l3[[3]]

我尝试了以下方法:
mat <- lapply(c(mat1, mat2, mat3), function(x) x[1] %*% x[2] %*% x[3])

但我没有得到我需要的东西。请帮忙?

最佳答案

我建议使用以下内容:

mat1 <- matrix(c(1:16), 4, 4, byrow = TRUE)
mat2 <- matrix(c(1:16), 4, 4, byrow = TRUE)
mat3 <- matrix(c(1:16), 4, 4, byrow = TRUE)

l1 <- list(mat1, mat2, mat3)
l2 <- list(mat1, mat2, mat3)
l3 <- list(mat1, mat2, mat3)

f <- function (...) Reduce("%*%", list(...))
mapply(f, l1, l2, l3, SIMPLIFY = FALSE)

#[[1]]
# [,1] [,2] [,3] [,4]
#[1,] 3140 3560 3980 4400
#[2,] 7268 8232 9196 10160
#[3,] 11396 12904 14412 15920
#[4,] 15524 17576 19628 21680
#
#[[2]]
# [,1] [,2] [,3] [,4]
#[1,] 3140 3560 3980 4400
#[2,] 7268 8232 9196 10160
#[3,] 11396 12904 14412 15920
#[4,] 15524 17576 19628 21680
#
#[[3]]
# [,1] [,2] [,3] [,4]
#[1,] 3140 3560 3980 4400
#[2,] 7268 8232 9196 10160
#[3,] 11396 12904 14412 15920
#[4,] 15524 17576 19628 21680

好处是,您向 mapply 提供多少列表并不重要。 .例如,
mapply(f, l1, l2, l3, l1, l3, l3, SIMPLIFY = FALSE)

也有效。这就是 Reduce的魔力和 ... .

关于r - 在 R 中使用 apply() 对三个矩阵列表进行矩阵乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com