Sums over repeated indices in an array.
contraction(x, i = NULL, drop = TRUE)indexed array. See index.
subset of repeated indices to sum up. If NULL, the summation takes place on all the repeated indices.
logical. Drop summation indices? If FALSE, keep dummy dimensions.
array.
Guidotti E (2022). "calculus: High-Dimensional Numerical and Symbolic Calculus in R." Journal of Statistical Software, 104(5), 1-37. doi:10.18637/jss.v104.i05
### matrix trace
x <- matrix(letters[1:4], nrow = 2)
contraction(x)
#> [1] "a + d"
### tensor trace
x <- array(1:27, dim = c(3,3,3))
contraction(x)
#> [1] 42
#### tensor contraction over repeated indices
x <- array(1:27, dim = c(3,3,3))
index(x) <- c("i","i","j")
contraction(x)
#> [1] 15 42 69
#### tensor contraction over specific repeated indices only
x <- array(1:16, dim = c(2,2,2,2))
index(x) <- c("i","i","k","k")
contraction(x, i = "k")
#> [,1] [,2]
#> [1,] 14 18
#> [2,] 16 20
#### tensor contraction keeping dummy dimensions
x <- array(letters[1:16], dim = c(2,2,2,2))
index(x) <- c("i","i","k","k")
contraction(x, drop = FALSE)
#> [,1] [,2]
#> [1,] "a" "m"
#> [2,] "d" "p"