# einsum: Einstein Summation of DelayedArray In rikenbit/DelayedTensor: R package for sparse and out-of-core arithmetic and decomposition of Tensor

 einsum R Documentation

## Einstein Summation of DelayedArray

### Description

Einstein summation is a convenient and concise notation for operations on n-dimensional arrays.

NOTE: Sparse mode of einsum is not available for now.

### Usage

```einsum(subscripts, ...)
```

### Arguments

 `subscripts` a string in Einstein notation where arrays are separated by ',' and the result is separated by '->'. For example `"ij,jk->ik"` corresponds to a standard matrix multiplication. Whitespace inside the `subscripts` is ignored. Unlike the equivalent functions in Python, `einsum` only supports the explicit mode. This means that the `subscripts` must contain '->'. `...` the DelayedArrays that are combined.

### Details

This function is an extension of the `einsum` by DelayedArray.

### Value

The `einsum` function returns an array with one dimension for each index in the result of the `subscripts`. For example `"ij,jk->ik"` produces a 2-dimensional array, `"abc,cd,de->abe"` produces a 3-dimensional array.

### Examples

```library("DelayedArray")
library("DelayedRandomArray")
darr1 <- RandomUnifArray(c(4,8))
darr2 <- RandomUnifArray(c(8,3))

# Matrix Multiply
darr1 %*% darr2
DelayedTensor::einsum("ij,jk -> ik", darr1, darr2)

# Diag
mat_sq <- RandomUnifArray(c(4,4))
DelayedTensor::diag(mat_sq)
einsum("ii->i", mat_sq)

# Trace
sum(DelayedTensor::diag(mat_sq))
einsum("ii->", mat_sq)

# Scalar product
darr3 <- RandomUnifArray(c(4,8))
darr3 * darr1
einsum("ij,ij->ij", darr3, darr1)

# Transpose
t(darr1)
einsum("ij->ji", darr1)

# Batched L2 norm
arr1 <- as.array(darr1)
arr3 <- as.array(darr3)
darr4 <- DelayedArray(array(c(arr1, arr3), dim = c(dim(arr1), 2)))

c(sum(darr1^2), sum(darr3^2))
einsum("ijb,ijb->b", darr4, darr4)
```

rikenbit/DelayedTensor documentation built on Jan. 30, 2023, 6:15 p.m.