[R] Fwd: Matrix rotation

Gabor Grothendieck ggrothendieck at gmail.com
Fri Nov 25 01:24:47 CET 2005


In thinking about this a bit more it can be simplified to
the following where f takes a 2x2 matrix as its first
argument and permutes it according to the second
argument returning the permuted 2x2 matrix:

f <- function(m = c(1,4,2,3), idx = c(2,4,1,3)) matrix(m[idx],2)
print(m <- f(,1:4))
for(i in 1:4) print(m <- f(m))


On 11/24/05, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> Try this:
>
> # cyclically rotate a vector to the right
> rot <- function(x) c(x[length(x)], x[-length(x)])
>
> # create a vector from a 2x2 matrix moving left to right along
> # first row and then right to left along second row
> m2v <- function(m) m[c(1,3,4,2)]
>
> # inverse of m2v.  Note that c(1,4,2,3) equals order(c(1,3,4,2))
> v2m <- function(v) matrix(v[c(1,4,2,3)],2)
>
> m <- matrix(1:4, 2, byrow = TRUE)
> print(mm <- m)
> for(i in 1:4) print(mm <- v2m(rot(m2v(mm))))
>
>
> On 11/24/05, Benjamin Lloyd-Hughes <blh at cpom.ucl.ac.uk> wrote:
> > Ok I warned you that I'd been drinking! What I really meant was
> > something to go from:
> >
> >      [,1] [,2]
> > [1,]    1    2
> > [2,]    4    3
> >
> > to
> >
> >      [,1] [,2]
> > [1,]    4    1
> > [2,]    3    2
> >
> > to
> >
> >      [,1] [,2]
> > [1,]    3    4
> > [2,]    2    1
> >
> > to
> >
> >      [,1] [,2]
> > [1,]    2    3
> > [2,]    1    4
> >
> > Sorry for being a muppet, B
> >
> >
> > Begin forwarded message:
> >
> > > From: Benjamin Lloyd-Hughes <blh at cpom.ucl.ac.uk>
> > > Date: 24 November 2005 16:15:58 GMT
> > > To: r-help at stat.math.ethz.ch
> > > Subject: Matrix rotation
> > >
> > > Dearest All,
> > >
> > > Ok so I've had a couple of glasses of wine over lunch today... This is
> > > likely to be trivial but I'm struggling to find a more elegant way to
> > > obtain the following matrix rotations:
> > >
> > > > M <- matrix(c(1,0,0,0), ncol=2)
> > > > M
> > >      [,1] [,2]
> > > [1,]    1    0
> > > [2,]    0    0
> > > > N <- abind(M[2,],M[1,],along=2)
> > > > N
> > >      [,1] [,2]
> > > [1,]    0    1
> > > [2,]    0    0
> > > > P <- abind(N[2,],N[1,],along=2)
> > > > P
> > >      [,1] [,2]
> > > [1,]    0    0
> > > [2,]    0    1
> > > > Q <- abind(P[,2],P[,1],along=2)
> > > > Q
> > >      [,1] [,2]
> > > [1,]    0    0
> > > [2,]    1    0
> > >
> > > And, more generally wish to rotate a n-dimensional data cube about
> > > some specified axis.
> > >
> > > Cheers, Ben
> > >
> >
> >        [[alternative text/enriched version deleted]]
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> >
>




More information about the R-help mailing list