Interpolative Decomposition (ID)

Implementation

Example driver

Interpolative Decompositions (ID’s) are closely related to pivoted QR factorizations and are useful for representing (approximately) low-rank matrices in terms of linear combinations of a few of their columns, i.e.,

\[A P = \hat{A} \begin{pmatrix} I & Z \end{pmatrix},\]

where \(P\) is a permutation matrix, \(\hat{A}\) is a small set of columns of \(A\), and \(Z\) is an interpolation matrix responsible for representing the remaining columns in terms of the selected columns of \(A\).

The following routines use column-pivoted QR factorizations to return an Interpolative Decomposition.

C++ API

void ID(const Matrix<F> &A, Matrix<int> &p, Matrix<F> &Z, const QRCtrl<Base<F>> ctrl = QRCtrl<Base<F>>())
void ID(const AbstractDistMatrix<F> &A, AbstractDistMatrix<int> &p, AbstractDistMatrix<F> &Z, const QRCtrl<Base<F>> ctrl = QRCtrl<Base<F>>())

The matrix \(A\) is not modified.

void ID(Matrix<F> &A, Matrix<int> &p, Matrix<F> &Z, const QRCtrl<Base<F>> ctrl = QRCtrl<Base<F>>(), bool canOverwrite = false)
void ID(AbstractDistMatrix<F> &A, AbstractDistMatrix<int> &p, AbstractDistMatrix<F> &Z, const QRCtrl<Base<F>> ctrl = QRCtrl<Base<F>>(), bool canOverwrite = false)

The matrix \(A\) is optionally allowed to be modified.

C API

ElError ElID_s(ElMatrix_s A, ElMatrix_i p, ElMatrix_s Z, ElQRCtrl_s ctrl, bool canOverwrite)
ElError ElID_d(ElMatrix_d A, ElMatrix_i p, ElMatrix_d Z, ElQRCtrl_d ctrl, bool canOverwrite)
ElError ElID_c(ElMatrix_c A, ElMatrix_i p, ElMatrix_c Z, ElQRCtrl_s ctrl, bool canOverwrite)
ElError ElID_z(ElMatrix_z A, ElMatrix_i p, ElMatrix_z Z, ElQRCtrl_d ctrl, bool canOverwrite)
ElError ElIDDist_s(ElDistMatrix_s A, ElDistMatrix_i p, ElDistMatrix_s Z, ElQRCtrl_s ctrl, bool canOverwrite)
ElError ElIDDist_d(ElDistMatrix_d A, ElDistMatrix_i p, ElDistMatrix_d Z, ElQRCtrl_d ctrl, bool canOverwrite)
ElError ElIDDist_c(ElDistMatrix_c A, ElDistMatrix_i p, ElDistMatrix_c Z, ElQRCtrl_s ctrl, bool canOverwrite)
ElError ElIDDist_z(ElDistMatrix_z A, ElDistMatrix_i p, ElDistMatrix_z Z, ElQRCtrl_d ctrl, bool canOverwrite)

The matrix \(A\) is optionally allowed to be modified.