逐行组合矩阵
Combine matrices row by row
我有两个任意大小的矩阵,例如矩阵 1 (n * m) 和矩阵 2 (k * l)。 R 中是否有一种(方便的)方式来逐行 cbind
它们,形成一个 (n * k) * (m + l) 矩阵,其中矩阵 1 的每一行都有机会 cbind
ed 到矩阵 2 的每一行?这是一个完整的逐行组合,所以顺序无关紧要。
例如,是否有函数 f
使得:
please click to view
谢谢!
可能有更好的解决方案,但这适用于较小规模的问题:
A <- matrix(c(1,2,3,2,3,4), nrow = 3)
B <- matrix(c(5,6,6,7,7,8), nrow = 2)
temp <- lapply(1:nrow(A), function(x){
C = apply(B, 1, function(y){
c(A[x,],y)
})
return(t(C))
})
output <- do.call(rbind, temp)
以后,请包含 copy/pasteable 的示例数据,而不仅仅是图片。
m1 = matrix(1:6, ncol = 2)
m2 = matrix(7:12, ncol = 3)
combos = expand.grid(1:nrow(m1), 1:nrow(m2))
cbind(m1[combos$Var1, ], m2[combos$Var2, ])
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 4 7 9 11
# [2,] 2 5 7 9 11
# [3,] 3 6 7 9 11
# [4,] 1 4 8 10 12
# [5,] 2 5 8 10 12
# [6,] 3 6 8 10 12
cbind(A[rep(1:(x<-nrow(A)),each=y<-nrow(B)),],B[rep(1:y,x),])
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 5 6 7
[2,] 1 2 6 7 8
[3,] 2 3 5 6 7
[4,] 2 3 6 7 8
[5,] 3 4 5 6 7
[6,] 3 4 6 7 8
细分:
x=nrow(A)
y=nrow(B)
cbind(A[rep(1:x,each=y),],B[rep(1:y,x),])
我有两个任意大小的矩阵,例如矩阵 1 (n * m) 和矩阵 2 (k * l)。 R 中是否有一种(方便的)方式来逐行 cbind
它们,形成一个 (n * k) * (m + l) 矩阵,其中矩阵 1 的每一行都有机会 cbind
ed 到矩阵 2 的每一行?这是一个完整的逐行组合,所以顺序无关紧要。
例如,是否有函数 f
使得:
please click to view
谢谢!
可能有更好的解决方案,但这适用于较小规模的问题:
A <- matrix(c(1,2,3,2,3,4), nrow = 3)
B <- matrix(c(5,6,6,7,7,8), nrow = 2)
temp <- lapply(1:nrow(A), function(x){
C = apply(B, 1, function(y){
c(A[x,],y)
})
return(t(C))
})
output <- do.call(rbind, temp)
以后,请包含 copy/pasteable 的示例数据,而不仅仅是图片。
m1 = matrix(1:6, ncol = 2)
m2 = matrix(7:12, ncol = 3)
combos = expand.grid(1:nrow(m1), 1:nrow(m2))
cbind(m1[combos$Var1, ], m2[combos$Var2, ])
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 4 7 9 11
# [2,] 2 5 7 9 11
# [3,] 3 6 7 9 11
# [4,] 1 4 8 10 12
# [5,] 2 5 8 10 12
# [6,] 3 6 8 10 12
cbind(A[rep(1:(x<-nrow(A)),each=y<-nrow(B)),],B[rep(1:y,x),])
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 5 6 7
[2,] 1 2 6 7 8
[3,] 2 3 5 6 7
[4,] 2 3 6 7 8
[5,] 3 4 5 6 7
[6,] 3 4 6 7 8
细分:
x=nrow(A)
y=nrow(B)
cbind(A[rep(1:x,each=y),],B[rep(1:y,x),])