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_matrixandreconstruct_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.ndarrayorscipy.sparse.linalg.LinearOperatorwith rmatvec Matrix to be factored
- eps_or_kfloat or int
Relative error (if
eps_or_k < 1) or rank (ifeps_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 typescipy.sparse.linalg.LinearOperator).- rng
numpy.random.Generator, optional Pseudorandom number generator state. When rng is None, a new
numpy.random.Generatoris created using entropy from the operating system. Types other thannumpy.random.Generatorare passed tonumpy.random.default_rngto instantiate aGenerator. IfrandisFalse, the argument is ignored.
- A
- 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.