2013-07-05 16 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

あなたの行列がリストに格納されている場合( 'lst <-list(a、b)')、 'Reduce(adiag、lst)'を使う必要があります。リストをネイティブに解析する方法を知っているようです – MichaelChirico

関連する問題