【发布时间】:2017-11-06 07:14:03
【问题描述】:
给定信息:
假设我有两个向量的列表(每个向量有 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
对所有其他元素和列表的第二个元素执行相同的操作。
【问题讨论】:
-
@akrun 非常感谢。我会尝试。我举了我需要的例子。你能看看吗?
-
我发布了一个解决方案。我无法重现“x”值,因为您没有使用
set.seed -
请检查我在下面发布的解决方案。我没有做很多检查
-
根据您之前展示的乘法,
a[[1]][,,1]*x[[1]][1]的做法不正确 -
@akrun 我逐点检查了它,是的,您的回答很棒。谢谢。
标签: r