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

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)