Hi everyone, I'm looking for a way to 'explode' a matrix like this:> matrix(1:4,2,2)[,1] [,2] [1,] 1 3 [2,] 2 4 into a matrix like this:> matrix(c(1,1,2,2,1,1,2,2,3,3,4,4,3,3,4,4),4,4)[,1] [,2] [,3] [,4] [1,] 1 1 3 3 [2,] 1 1 3 3 [3,] 2 2 4 4 [4,] 2 2 4 4 My current kludge is this: v1=rep(1:4,each=2,times=2) v2=v1[order(rep(1:2,each=4,times=2))] matrix(v2,4,4) But I'm hoping there's a more efficient solution that I'm not aware of. Many thanks, Kevin
Try this: apply(apply(m, 2, rep, each = 2), 1, rep, each = 2) or m[rep(seq(nrow(m)), each = 2), rep(seq(ncol(m)), each = 2)] On Wed, Jan 5, 2011 at 10:03 AM, Kevin Ummel <kevinummel@gmail.com> wrote:> Hi everyone, > > I'm looking for a way to 'explode' a matrix like this: > > > matrix(1:4,2,2) > [,1] [,2] > [1,] 1 3 > [2,] 2 4 > > into a matrix like this: > > > matrix(c(1,1,2,2,1,1,2,2,3,3,4,4,3,3,4,4),4,4) > [,1] [,2] [,3] [,4] > [1,] 1 1 3 3 > [2,] 1 1 3 3 > [3,] 2 2 4 4 > [4,] 2 2 4 4 > > My current kludge is this: > > v1=rep(1:4,each=2,times=2) > v2=v1[order(rep(1:2,each=4,times=2))] > matrix(v2,4,4) > > But I'm hoping there's a more efficient solution that I'm not aware of. > > Many thanks, > Kevin > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]]
Kevin Ummel <kevinummel <at> gmail.com> writes:> I'm looking for a way to 'explode' a matrix like this: > > > matrix(1:4,2,2) > [,1] [,2] > [1,] 1 3 > [2,] 2 4 >This is the Kronecker product of your matrix with the matrix (1 1 ; 1 1) m <- matrix(1:4,2,2) kronecker(m,matrix(1,2,2)) cheers Ben Bolker
Hi Kevin, Take a look at ?kronecker HTH, Jorge On Wed, Jan 5, 2011 at 7:03 AM, Kevin Ummel <> wrote:> Hi everyone, > > I'm looking for a way to 'explode' a matrix like this: > > > matrix(1:4,2,2) > [,1] [,2] > [1,] 1 3 > [2,] 2 4 > > into a matrix like this: > > > matrix(c(1,1,2,2,1,1,2,2,3,3,4,4,3,3,4,4),4,4) > [,1] [,2] [,3] [,4] > [1,] 1 1 3 3 > [2,] 1 1 3 3 > [3,] 2 2 4 4 > [4,] 2 2 4 4 > > My current kludge is this: > > v1=rep(1:4,each=2,times=2) > v2=v1[order(rep(1:2,each=4,times=2))] > matrix(v2,4,4) > > But I'm hoping there's a more efficient solution that I'm not aware of. > > Many thanks, > Kevin > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]