从`ColPivHouseholderQR`中提取Q的前N列

时间:2017-10-12 17:17:44

标签: c++ linear-algebra eigen

我正在尝试使用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;

0 个答案:

没有答案