【发布时间】:2017-11-07 07:43:27
【问题描述】:
想法:
假设我有一个10 向量列表,并希望将每个向量乘以列的数组的特定值。也就是说,第一个向量值仅乘以每个数组的第一个元素。然后,第二个向量值只乘以每个数组的第二个元素。对所有向量都这样做。因为我有10 向量(每个都有100 值)和100 数组,所以每个都有10 非零值。然后,我想按照上面的描述进行一一相乘。
示例,
-
取列表的第一个向量。
x[[1]]然后将它的每个元素乘以数组的每个第一个元素。 -
然后第二个向量值乘以数组的每个第二个元素。
-
然后,第三个向量值乘以数组的每个第三个元素。
-
对所有其他向量执行此操作。
数值例子:
假设我有一个向量列表,以下向量是我列表的第一个和第二个向量。
[[1]]
[1] 2.174090 1.666464 1.915763 2.282967 2.407327 1.386437 2.854528 1.896338 2.010713 1.013387 .......... (`100` values)
[[2]]
[1] 2.3020147 3.3311029 -0.3103701 3.2445878 5.6261224 5.2914477 -1.0621042 3.0790536 3.6186598
[10] 4.1846937 ........ (`100` values)
[[3]]
[1] 0.42808525 4.02348551 -2.31160703 5.56077594 2.83856320 -0.02850242 1.57480238 -2.68603276
[9] 2.34598854 4.14115289 ....(`100` values)
假设我有一个包含 10 值的数组列表 (100)。让我们下面的数组是我的数组列表的第一个和第二个数组。
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 0.0000000 0.00000000 0.0000000 0.000000 0
[2,] -0.4610817 0.00000000 0.0000000 0.000000 0
[3,] 0.4697426 -0.07296078 0.0000000 0.000000 0
[4,] -0.2790043 -0.77459992 -0.7478920 0.000000 0
[5,] -0.2156273 -2.59804286 -0.9390597 -1.746925 0
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,] 0.00000000 0.0000000 0.0000000 0.000000 0
[2,] -0.21896586 0.0000000 0.0000000 0.000000 0
[3,] -0.09066381 0.2920374 0.0000000 0.000000 0
[4,] 1.27289131 -0.2748794 1.0862465 0.000000 0
[5,] -1.20050567 -1.0934879 -0.7707806 -2.180104 0
然后我想将第一个向量的第一个元素乘以数组的第一个非零值。即2.174090 * -0.4610817 。 然后,第一个向量的第二个元素将乘以第二个数组的第一个元素,即1.666464 * -0.21896586 。然后,第二个向量的第一个元素乘以第一个数组的第二个元素,即2.3020147 * 0.4697426第二个向量的第二个元素乘以第二个数组的第二个元素 即3.3311029 * -0.09066381 。
第三个向量乘以数组的每个第三个元素。
0.42808525 * -0.2790043
即:
第一个向量的元素只乘以数组的第一个元素(一个接一个)。然后,第二个向量只乘以数组的第二个元素。
代码:
a <- array(rnorm(5 * 5 * 100), c(5, 5, 100))
for(k in seq(dim(a)[3])) a[,,k][upper.tri(a[,,k], diag = TRUE)] <- 0
a
x <- rnorm(100,2,2)
x <- rep(list(x), 10)
我尝试了答案(非常感谢)但出现错误:(x is a list`)
> a[a!=0] <- a[a!=0]*x
Error in a[a != 0] * x : non-numeric argument to binary operator
有什么想法吗?
【问题讨论】:
-
@akrun 谢谢,不,这完全不同。这将每个向量乘以每个数组。这里每个元素一个元素。
-
试试
a[a!=0] <- a[a!=0]*x -
@akrun 非常感谢。我会试试看。
-
好的,在这种情况下,更新的答案应该可以工作
-
非常感谢。真的很感激。
标签: r