Sums over repeated indices in an array.

contraction(x, i = NULL, drop = TRUE)

## Arguments

x 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.

## Value

array.

Guidotti, E. (2020). "calculus: High dimensional numerical and symbolic calculus in R". https://arxiv.org/abs/2101.00086

Other tensor algebra: delta(), diagonal(), einstein(), epsilon(), index()

## Examples

### matrix trace
x <- matrix(letters[1:4], nrow = 2)
contraction(x)
#>  "a + d"
### tensor trace
x <- array(1:27, dim = c(3,3,3))
contraction(x)
#>  42
#### tensor contraction over repeated indices
x <- array(1:27, dim = c(3,3,3))
index(x) <- c("i","i","j")
contraction(x)
#>  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"