我正在尝试使用Eigen
线性代数库在C ++中实现典型相关分析。
算法的一部分涉及使用列枢轴方法进行QR分解。对于那篇文章,我正在使用ColPivHouseholderQR
类。这个类包含一个HouseholderSequenceType
类型的对象,我想用它来提取矩阵的前N列,而不是整个Q矩阵。
完整的Q矩阵具有与行一样多的列,并且即使是适度的数据集大小也可以快速填充内存。此外,我不需要完整的矩阵,但只需要前N列的一部分。
如何从此对象中仅提取前N列?
我的代码:
// Set up the class and compute the QR decomposition
Eigen::ColPivHouseholderQR< Eigen::MatrixXd > qr;
qr.setThreshold(threshold);
qr.compute(mat);
int rk = qr.rank();
Eigen::ColPivHouseholderQR< Eigen::MatrixXd >::HouseholderSequenceType seq = qr.householderQ();
seq.setLength(rk);
// return the matrix
return (Eigen::MatrixXd) seq;