MOHAMMED
MOHAMMED

Reputation: 400

create block matrix in R

I want to create a block matrix, yet not a diagonal one. For example

# Matrix M

M = matrix(c(1,1,1,3,3,3, rep(0,9),
             1,1,1,3,3,3, rep(0,9),
             5,5,5,2,2,2, rep(0,9),
             5,5,5,2,2,2, rep(0,9)), nrow = 15)

So, I want the block of 1's and next to it the block of 5's with specific dimensions. I can create a zero matrix as the base matrix then fills in the blocks.

Your help is appreciated

Upvotes: 0

Views: 1580

Answers (1)

G. Grothendieck
G. Grothendieck

Reputation: 269644

1) Create a 2x2 matrix m1 from the 4 numbers and then take the kronecker product of that with a 3x2 matrix m2 of ones giving m3. rbind m3 to a 9x4 matrix m4 of zeros.

m1 <- matrix(c(1, 3, 5, 2), 2)
m2 <- matrix(1, 3, 2)
m3 <- m1 %x% m2
m4 <- matrix(0, 9, ncol(m3))
rbind(m3, m4)

giving:

      [,1] [,2] [,3] [,4]
 [1,]    1    1    5    5
 [2,]    1    1    5    5
 [3,]    1    1    5    5
 [4,]    3    3    2    2
 [5,]    3    3    2    2
 [6,]    3    3    2    2
 [7,]    0    0    0    0
 [8,]    0    0    0    0
 [9,]    0    0    0    0
[10,]    0    0    0    0
[11,]    0    0    0    0
[12,]    0    0    0    0
[13,]    0    0    0    0
[14,]    0    0    0    0
[15,]    0    0    0    0

2) In thinking about this a bit more we can shorten it to this where m1 and m2 are the same as in (1).

m1 <- matrix(c(1, 3, 5, 2), 2)
m2 <- matrix(1, 3, 2)
rbind(m1, 0 * m2) %x% m2

Upvotes: 3

Related Questions