Skip to contents

Compute index vectors for extracting or reordering of lower or upper triangular matrices that are stored as contiguous vectors.

Usage

lower.to.upper.tri.inds(n)
upper.to.lower.tri.inds(n)

Arguments

n

integer larger than 1.

Value

integer vector containing a permutation of 1:N where \(N = n(n-1)/2\).

See also

upper.tri, lower.tri with a related purpose.

Examples

m5 <- matrix(NA,5,5)
m <- m5; m[lower.tri(m)] <- upper.to.lower.tri.inds(5); m
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]   NA   NA   NA   NA   NA
#> [2,]    1   NA   NA   NA   NA
#> [3,]    2    3   NA   NA   NA
#> [4,]    4    5    6   NA   NA
#> [5,]    7    8    9   10   NA
m <- m5; m[upper.tri(m)] <- lower.to.upper.tri.inds(5); m
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]   NA    1    2    3    4
#> [2,]   NA   NA    5    6    7
#> [3,]   NA   NA   NA    8    9
#> [4,]   NA   NA   NA   NA   10
#> [5,]   NA   NA   NA   NA   NA

stopifnot(lower.to.upper.tri.inds(2) == 1,
          lower.to.upper.tri.inds(3) == 1:3,
          upper.to.lower.tri.inds(3) == 1:3,
     sort(upper.to.lower.tri.inds(5)) == 1:10,
     sort(lower.to.upper.tri.inds(6)) == 1:15)