scipy.linalg.interpolative.

# interp_decomp#

scipy.linalg.interpolative.interp_decomp(A, eps_or_k, rand=True, rng=None)[source]#

Compute ID of a matrix.

An ID of a matrix A is a factorization defined by a rank k, a column index array idx, and interpolation coefficients proj such that:

```numpy.dot(A[:,idx[:k]], proj) = A[:,idx[k:]]
```

The original matrix can then be reconstructed as:

```numpy.hstack([A[:,idx[:k]],
numpy.dot(A[:,idx[:k]], proj)]
)[:,numpy.argsort(idx)]
```

or via the routine `reconstruct_matrix_from_id`. This can equivalently be written as:

```numpy.dot(A[:,idx[:k]],
numpy.hstack([numpy.eye(k), proj])
)[:,np.argsort(idx)]
```

in terms of the skeleton and interpolation matrices:

```B = A[:,idx[:k]]
```

and:

```P = numpy.hstack([numpy.eye(k), proj])[:,np.argsort(idx)]
```

respectively. See also `reconstruct_interp_matrix` and `reconstruct_skel_matrix`.

The ID can be computed to any relative precision or rank (depending on the value of eps_or_k). If a precision is specified (eps_or_k < 1), then this function has the output signature:

```k, idx, proj = interp_decomp(A, eps_or_k)
```

Otherwise, if a rank is specified (eps_or_k >= 1), then the output signature is:

```idx, proj = interp_decomp(A, eps_or_k)
```
Parameters:
A

Matrix to be factored

eps_or_kfloat or int

Relative error (if `eps_or_k < 1`) or rank (if `eps_or_k >= 1`) of approximation.

randbool, optional

Whether to use random sampling if A is of type `numpy.ndarray` (randomized algorithms are always used if A is of type `scipy.sparse.linalg.LinearOperator`).

rng`numpy.random.Generator`

NumPy generator for the randomization steps in the algorithm. If `rand` is `False`, the argument is ignored.

Returns:
kint

Rank required to achieve specified relative precision if `eps_or_k < 1`.

idx`numpy.ndarray`

Column index array.

proj`numpy.ndarray`

Interpolation coefficients.