# cp: Canonical Polyadic Decomposition In rikenbit/DelayedTensor: R package for sparse and out-of-core arithmetic and decomposition of Tensor

 cp-methods R Documentation

### Description

Canonical Polyadic (CP) decomposition of a tensor, aka CANDECOMP/PARAFRAC. Approximate a K-Tensor using a sum of `num_components` rank-1 K-Tensors. A rank-1 K-Tensor can be written as an outer product of K vectors. There are a total of `num_compoents *darr@num_modes` vectors in the output, stored in `darr@num_modes` matrices, each with `num_components` columns. This is an iterative algorithm, with two possible stopping conditions: either relative error in Frobenius norm has gotten below `tol`, or the `max_iter` number of iterations has been reached. For more details on CP decomposition, consult Kolda and Bader (2009).

### Usage

```cp(darr, num_components=NULL, max_iter=25, tol=1e-05)

## S4 method for signature 'DelayedArray'
cp(darr, num_components, max_iter, tol)
```

### Arguments

 `darr` Tensor with K modes `num_components` the number of rank-1 K-Tensors to use in approximation `max_iter` maximum number of iterations if error stays above `tol` `tol` relative Frobenius norm error tolerance

### Details

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

Uses the Alternating Least Squares (ALS) estimation procedure. A progress bar is included to help monitor operations on large tensors.

### Value

a list containing the following

`lambdas`

a vector of normalizing constants, one for each component

`U`

a list of matrices - one for each mode - each matrix with `num_components` columns

`conv`

whether or not `resid` < `tol` by the last iteration

`norm_percent`

the percent of Frobenius norm explained by the approximation

`est`

estimate of `darr` after compression

`fnorm_resid`

the Frobenius norm of the error `fnorm(est-darr)`

`all_resids`

vector containing the Frobenius norm of error for all the iterations

### References

T. Kolda, B. Bader, "Tensor decomposition and applications". SIAM Applied Mathematics and Applications 2009.

`tucker`
```library("DelayedRandomArray")