2013-07-05 3 views
15

R은 블록 대각선 형태로 행렬을 바인딩하는 기본 함수를 가지고 있습니까?행렬의 블록 대각선 바인딩

다음은 일을하지만 표준 방법이 있는지 알고 싶습니다 : 당신이 원하는 것을 magic 패키지에서

a <- matrix(1:6, 2, 3) 
b <- matrix(7:10, 2, 2) 

rbind(cbind(a, matrix(0, nrow=nrow(a), ncol=ncol(b))), 
     cbind(matrix(0, nrow=nrow(b), ncol=ncol(a)), b)) 

#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 1 3 5 0 0 
#[2,] 2 4 6 0 0 
#[3,] 0 0 0 7 9 
#[4,] 0 0 0 8 10 

답변

17

adiag : 또는

library(magic) 
adiag(a,b) 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 0 0 
[2,] 2 4 6 0 0 
[3,] 0 0 0 7 9 
[4,] 0 0 0 8 10 

, 당신은 패키지 Matrix과 기능을 사용할 수 있습니다 bdiag

library(Matrix) 
bdiag(a,b) 
4 x 5 sparse Matrix of class "dgCMatrix" 

[1,] 1 3 5 . . 
[2,] 2 4 6 . . 
[3,] . . . 7 9 
[4,] . . . 8 10 

은 드문 드문 한 행렬을 반환하며 더 효율적일 수 있습니다. 정기적으로 받으려면 as.matrix(bdiag(a,b))을 사용하십시오.

+1

'adiag'에 행렬을리스트에 저장하면 (예 :'lst <-list (a, b)'),'Reduce (adiag, lst)'를 사용해야합니다. 목록을 기본적으로 구문 분석하는 방법을 알고있는 것 같습니다. – MichaelChirico

관련 문제