假设我有两个向量的列表(每个向量有10个元素)。另外,假设我有一个数组列表(列表中每个元素有10个数组)。这些阵列是下三角形。即上三角值为零。
载体:
x <- list(rnorm(10,0,2), rnorm(10,2,2))
数组:
set.seed(47)
a <- vector("list",2)
for( i in seq_along(a)){
a[[i]] <- array(rnorm(5 * 5 * 10), c(5, 5, 10))
for(k in seq(dim(a[[1]])[3])) a[[i]][,,k][upper.tri(a[[i]][,,k], diag = TRUE)] <- 0
}
我想将每个向量的每个元素乘以列中相应的数组元素。也就是说,
即,
每个向量包含10个元素,每个数组有10个值。我想将向量的第一个值乘以数组的第一个值,并为其他元素执行此操作。
> x
[[1]]
[1] 1.2062716 1.4671676 -2.9603710 -4.2447263 1.4897441 3.8680305 0.7318295 -3.9691290 -0.8161910
[10] 0.8807681
[[2]]
[1] 0.80512691 -0.03917115 2.58162187 2.91426812 2.78445280 0.32298579 2.33907433 -0.70444579
[9] -0.52903520 4.60506480
[[1]]
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.00000000 0.00000000 0.00000000 0
[2,] 0.7111425 0.00000000 0.00000000 0.00000000 0
[3,] 0.1854053 0.01513086 0.00000000 0.00000000 0
[4,] -0.2817650 -0.25204590 -1.82822917 0.00000000 0
[5,] 0.1087755 -1.46575030 0.09147291 -0.04057817 0
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,] 0.00000000 0.0000000 0.0000000 0.0000000 0
[2,] -1.60815993 0.0000000 0.0000000 0.0000000 0
[3,] -2.32237229 -1.2004406 0.0000000 0.0000000 0
[4,] -1.96721918 0.8852306 0.5066870 0.0000000 0
[5,] 0.02752681 0.8869350 0.5643018 -0.4876964 0
我想将第一个列表的第一个元素乘以第一个元素(数组列表的第一个元素),即
1.2062716 * 0.7111425
和
1.2062716 * -1.60815993
1.4671676 * 0.1854053
和
1.4671676 * -2.32237229
然后第一个元素的预期乘法是
> a[[1]][,,1]*x[[1]][1]
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.00000000 0.0000000 0.0000000 0
[2,] 0.8578310 0.00000000 0.0000000 0.0000000 0
[3,] 0.2236491 0.01825193 0.0000000 0.0000000 0
[4,] -0.3398851 -0.30403580 -2.2053409 0.0000000 0
[5,] 0.1312129 -1.76809293 0.1103412 -0.0489483 0
答案的结果是:
[[1]]
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.00000000 0.00000000 0.00000000 0
[2,] 0.8578310 0.00000000 0.00000000 0.00000000 0
[3,] 0.2720206 0.02254111 0.00000000 0.00000000 0
[4,] 0.8341290 -0.97492123 7.25647738 0.00000000 0
[5,] -0.4617224 -1.07267929 -0.07465937 -0.03573996 0
对所有其他元素和列表的第二个元素执行相同的操作。
答案 0 :(得分:1)
我们可以尝试Map
res <- Map(function(u, v) {
u[u!=0] <- u[u!=0]*rep(v, dim(u)[3])
u},
a, x)
a[[1]][2,1,1]*x[[1]][1]
#[1] 0.3840722
a[[1]][2,1,2]*x[[1]][1]
#[1] -0.8685313
res[[1]][2, 1, 1]
#[1] 0.3840722
res[[1]][2, 1, 2]
#[1] -0.8685313