假设我有一个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)
假设我有一个包含100
值的数组(10
)数组列表。并且让以下数组是我的数组列表的第一个和第二个数组。
, , 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
是一个列表`)
> a[a!=0] <- a[a!=0]*x
Error in a[a != 0] * x : non-numeric argument to binary operator
请问,好吗?
答案 0 :(得分:0)
我们可以根据非零值进行分配。正如vector
&#39; x&#39;与每个2D阵列切片中的非零值的长度相同,我们可以利用&#39; x&#39;
a[a!=0] <- a[a!=0]*x
dim(a)
#[1] 5 5 10
作业前的值
a[2,1,1]*x[1]
#[1] 1.462893
a[2,1,2]*x[1]
#[1] -0.2332104
分配后
a[2, 1, 1]
#[1] 1.462893
a[2, 1, 2]
#[1] -0.2332104
如果我们需要乘以list
(&#39; x&#39;),然后unlist
它并创建一个matrix
byrow=TRUE
来获取元素正确乘以
a[a != 0] <- a[a != 0]*do.call(rbind, x)
作业前的值
a[2,1,1]*x[[1]][1]
#[1] 0.2297043
a[3,1,1]*x[[2]][1]
#[1] 0.1796345
作业后的值
a[2, 1, 1]
#[1] 0.2297043
a[3, 1, 1]
#[1] 0.1796345
set.seed(24)
a <- array(rnorm(5 * 5 * 10), c(5, 5, 10))
for(k in seq(dim(a)[3])) a[,,k][upper.tri(a[,,k], diag = TRUE)] <- 0