#### Previous topic

Interpolative matrix decomposition (`scipy.linalg.interpolative`)

#### Next topic

scipy.linalg.interpolative.reconstruct_matrix_from_id

# scipy.linalg.interpolative.interp_decomp

`scipy.linalg.interpolative.``interp_decomp`(A, eps_or_k, rand=True)

  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 : `numpy.ndarray` or `scipy.sparse.linalg.LinearOperator` with rmatvec

  > Matrix to be factored

  eps_or_k : float or int

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

  rand : bool, 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`).

  Returns:

  k : int

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

  idx : `numpy.ndarray`

  > Column index array.

  proj : `numpy.ndarray`

  > Interpolation coefficients.