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
[,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.
On Fri, Feb 10, 2012 at 12:02:25AM -0800, xiddw 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
[,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.
Hi.
Try the following.
k <- 3
n <- 2^k
m <- 2^(k - 2)
a <- matrix(1:n^2, nrow=n, ncol=n)
g <- vector("list", length=16)
k <- 1
for (j in 0:3) {
for (i in 0:3) {
g[[k]] <- a[m*i + 1:m, m*j + 1:m]
k <- k + 1
}
}
g[1:5]
[[1]]
[,1] [,2]
[1,] 1 9
[2,] 2 10
[[2]]
[,1] [,2]
[1,] 3 11
[2,] 4 12
[[3]]
[,1] [,2]
[1,] 5 13
[2,] 6 14
[[4]]
[,1] [,2]
[1,] 7 15
[2,] 8 16
[[5]]
[,1] [,2]
[1,] 17 25
[2,] 18 26
...
Hope this helps.
Petr Savicky.
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
? ? [,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.
Thanks to Peter and Gabriel for their comments,
The first way which Peter commented was my first approach, however as I use
it for a 'large' matrix (in my case nrow = ncol = 512) and I want to split
it into very small matrices (e.g. nrow = ncol = {4, 8, 16}) both nested
loops I think are a quite expensive and that's why I was looking for a
better way.
The Gabor's approach works perfect for my needs, thanks :)
--
View this message in context: http://r.789695.n4.nabble.com/Split-matrix-into-square-submatices-tp4375563p4376952.html
Sent from the R help mailing list archive at Nabble.com.