[R] symmetric matrix on both diagonals

Petr Savicky savicky at cs.cas.cz
Sat Apr 21 07:13:27 CEST 2012


On Fri, Apr 20, 2012 at 10:52:47AM -0400, David Winsemius wrote:
> 
> On Apr 20, 2012, at 7:05 AM, Petr Savicky wrote:
> 
> >On Fri, Apr 20, 2012 at 03:03:40AM -0700, juliane0212 wrote:
> >>
> >>I'm  having some problems computing a matrix being symmetric on both
> >>diagonals.
> >>
> >>Does anyone know a way to get from this matrix
> >>
> >>
> >>M <- matrix(c(1,0,0,0,2,7,0,0,3,4,0,0,6,0,0,0), ncol=4)
> >>
> >>to this one
> >>
> >>              M_final <- matrix(c(1,2,3,6,2,7,4,3,3,4,7,2,6,3,2,1),  
> >>ncol=4)
> >
> >Hi.
> >
> >Try the following.
> >
> > M[row(M) > col(M)] <- t(M)[row(M) > col(M)]
> > n <- nrow(M)
> > M[row(M) + col(M) > n + 1] <- M[n:1, n:1][row(M) + col(M) > n + 1]
> > all(M == M_final)
> >
> > [1] TRUE
> 
> How about?
> 
> > M[3:4, ] <- rev(M[1:2,])
> > M
>      [,1] [,2] [,3] [,4]
> [1,]    1    2    3    6
> [2,]    2    7    4    3
> [3,]    3    4    7    2
> [4,]    6    3    2    1

Hi.

I am not sure, which matrix did you start from. If we start
from the original matrix, then we get

  M <- matrix(c(1,0,0,0,2,7,0,0,3,4,0,0,6,0,0,0), ncol=4)
  M[3:4, ] <- rev(M[1:2,])
  M

       [,1] [,2] [,3] [,4]
  [1,]    1    2    3    6
  [2,]    0    7    4    0
  [3,]    0    4    7    0
  [4,]    6    3    2    1

where the components 2 and 3 have two and not four copies.

Petr.



More information about the R-help mailing list