是否有任何简单有效的方法来提取以下矩阵的奇数/偶数行或列:
int m=999,n = 1000;
MatrixXd mat(m,n);
并将它们提取到一个新的矩阵中?
一种可能的方式是使用for
循环并将所需行/列放入新矩阵的相应行/列中。但是,有没有更简单、更有效的方法呢?
没有更有效的解决方案,但对于列,由于您有一个包含偶数列的列主矩阵,因此您可以重塑数据,使偶数/奇数列形成块:
MatrixXd even_cols = MatrixXd::Map(mat.data(), 2*999, 500).topRows(999);
MatrixXd odd_cols = MatrixXd::Map(mat.data(), 2*999, 500).bottomRows(999);
另一种更通用的方法是大步前进:
MatrixXd even_cols = MatrixXd::Map(mat.data(), 999, 500, OuterStride<>(2*999));
MatrixXd odd_cols = MatrixXd::Map(mat.data()+999, 999, 500, OuterStride<>(2*999));
这也适用于具有列主矩阵的偶数/奇数行。在这种情况下,我们需要定义一个内部步幅2:
MatrixXd even_rows = MatrixXd::Map(mat.data(), 500, 1000, Strides<Dynamic,2>(999,2));
MatrixXd odd_rows = MatrixXd::Map(mat.data()+1, 499, 1000, Strides<Dynamic,2>(999,2));