我正在寻找一种在向量中选择一组元素并将其与矩阵相乘的方法,同时将其他元素设置为零,然后对下一组重复此过程。
例如让
a <- c(2:7)
b <- matrix(1:36, byrow = FALSE, nrow = 6)
给予
[[1]]
[1] 2 3 4 5 6 7
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 7 8 9 10 11 12
[3,] 13 14 15 16 17 18
[4,] 19 20 21 22 23 24
[5,] 25 26 27 28 29 30
[6,] 31 32 33 34 35 36
将定义为具有三组:
r如何将组1的向量与b相乘以将其他所有值都设为零(2 3 0 0 0 0
),然后对组2(0 0 4 5 0 0
)和3(0 0 0 0 6 7
)重复?
这是获得结果的一种方法:
k <- 2
v <- rep(1:(length(a) %/% k), each = k)
sapply(unique(v), function(n) a[which(v == n)] %*% b[which(v == n), ])
# [,1] [,2] [,3]
# [1,] 8 32 72
# [2,] 38 86 150
# [3,] 68 140 228
# [4,] 98 194 306
# [5,] 128 248 384
# [6,] 158 302 462
一些解释。k
是每个组中元素的数量,在您的实际情况下应为56。v
是在每个坐标处具有相应块编号的向量。然后我去了所有的块数unique(v)
,但不是创建矢量像c(2,3,0,0,0,0)
我只拿c(2,3)
和仅矩阵的前两行b
,这相当于用零玩。另外,如果的长度可以a
被整除k
,则可以将最后一行替换为
sapply(unique(v), function(n) a[v == n] %*% b[v == n, ])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句