[R] Split matrix into square submatices
Gabor Grothendieck
ggrothendieck at gmail.com
Fri Feb 10 16:23:58 CET 2012
On Fri, Feb 10, 2012 at 3:02 AM, xiddw <xiDDdw at gmail.com> wrote:
> Hi everybody,
>
> I'm looking for an optimal way to split a big matrix (e.g. ncol = 8,
> nrow=8) into small square submatrices (e.g. ncol=2, nrow=2)
>
> For example
>
> If I have
>
>> h
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
> [1,] 1 9 17 25 33 41 49 57
> [2,] 2 10 18 26 34 42 50 58
> [3,] 3 11 19 27 35 43 51 59
> [4,] 4 12 20 28 36 44 52 60
> [5,] 5 13 21 29 37 45 53 61
> [6,] 6 14 22 30 38 46 54 62
> [7,] 7 15 23 31 39 47 55 63
> [8,] 8 16 24 32 40 48 56 64
>
> and I want to split matriz h into 16 small submatrices:
>
>> g[1]
> [,1] [,2]
> [1,] 1 9
> [2,] 2 10
>
>> g[2]
> [,1] [,2]
> [1,] 17 25
> [2,] 18 26
>
> ...
>
>> g[4]
> [,1] [,2]
> [1,] 49 57
> [2,] 50 58
>
> ...
>
>> g[16]
> [,1] [,2]
> [1,] 55 63
> [2,] 56 64
>
> Always the big matrix would be a square matrix and also would have a nrow
> and ncol in order of a power of two, so it always could be splitted in at
> least halves.
>
> Until now, I'm able to split a matrix but keeping the number of original
> matrix columns.
>
> I mean, if I want to split into 16 submatrices, using the following command
> what I get its 4 lists:
> But I haven't found a way to split resultant lists in order to get 4
> matrices for each list.
>
>> g <- split(as.data.frame(h), (1:4))
>> g
> $`1`
> V1 V2 V3 V4 V5 V6 V7 V8
> 1 1 9 17 25 33 41 49 57
> 5 5 13 21 29 37 45 53 61
>
> $`2`
> V1 V2 V3 V4 V5 V6 V7 V8
> 2 2 10 18 26 34 42 50 58
> 6 6 14 22 30 38 46 54 62
>
> $`3`
> V1 V2 V3 V4 V5 V6 V7 V8
> 3 3 11 19 27 35 43 51 59
> 7 7 15 23 31 39 47 55 63
>
> $`4`
> V1 V2 V3 V4 V5 V6 V7 V8
> 4 4 12 20 28 36 44 52 60
> 8 8 16 24 32 40 48 56 64
>
>
Try this:
h <- matrix(1:64, 8) # input
k <- kronecker(matrix(1:16, 4, byrow = TRUE), matrix(1, 2, 2))
g <- lapply(split(h, k), matrix, nr = 2)
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
More information about the R-help
mailing list