Skeleton decomposition¶
Skeleton decompositions are essentially two-sided interpolative decompositions, but the terminology is unfortunately extremely contested. We follow the convention that a skeleton decomposition is an approximation
\[A \approx A_C Z A_R,\]
where \(A_C\) is a (small) selection of columns of \(A\), \(A_R\) is a (small) selection of rows of \(A\), and \(Z\) is a (small) square matrix. When \(Z\) is allowed to be rectangular, it is more common to call this a CUR decomposition.
Note that the following routines do not directly return \(A_R\) and \(A_C\); the permutation matrices which implicitly define them are returned instead.
C++ API¶
-
void
Skeleton
(const Matrix<F> &A, Matrix<int> &pR, Matrix<int> &pC, Matrix<F> &Z, const QRCtrl<Base<F>> ctrl = QRCtrl<Base<F>>())¶
-
void
Skeleton
(const AbstractDistMatrix<F> &A, AbstractDistMatrix<int> &pR, AbstractDistMatrix<int> &pC, const QRCtrl<Base<F>> ctrl = QRCtrl<Base<F>>())¶
C API¶
-
ElError
ElSkeleton_s
(ElConstMatrix_s A, ElMatrix_i pR, ElMatrix_i pC, ElMatrix_s Z, ElQRCtrl_s ctrl)¶
-
ElError
ElSkeleton_d
(ElConstMatrix_d A, ElMatrix_i pR, ElMatrix_i pC, ElMatrix_d Z, ElQRCtrl_d ctrl)¶
-
ElError
ElSkeleton_c
(ElConstMatrix_c A, ElMatrix_i pR, ElMatrix_i pC, ElMatrix_c Z, ElQRCtrl_s ctrl)¶
-
ElError
ElSkeleton_z
(ElConstMatrix_z A, ElMatrix_i pR, ElMatrix_i pC, ElMatrix_z Z, ElQRCtrl_d ctrl)¶
-
ElError
ElSkeletonDist_s
(ElConstDistMatrix_s A, ElDistMatrix_i pR, ElDistMatrix_i pC, ElDistMatrix_s Z, ElQRCtrl_s ctrl)¶
-
ElError
ElSkeletonDist_d
(ElConstDistMatrix_d A, ElDistMatrix_i pR, ElDistMatrix_i pC, ElDistMatrix_d Z, ElQRCtrl_d ctrl)¶