从Eigen矩阵或向量中选择每个第k个元素?

时间:2017-05-16 08:07:15

标签: matrix eigen

在Eigen中,我有一个M x kN实矩阵,以默认的列主要顺序存储。每个M行都包含N k - 元组;例如,k=3, (a0 b0 c0 a1 b1 c1 ... aN bN cN)

如何提取包含每个k-元素的向量(或其行或列是一组kN向量的矩阵);例如,(a0 a1 ... aN), (b0 b1 ... bN)

64位Windows 7,Visual C ++

1 个答案:

答案 0 :(得分:0)

使用Eigen::Map并将外跨步设为k * m.cols()

#include <Eigen/Core>
#include <iostream>
int main()
{
    int sz = 8;
    Eigen::MatrixXd m(8,8);

    Eigen::Map<Eigen::VectorXd>(m.data(), sz*sz).setLinSpaced(1., sz*sz);

    std::cout << m << "\n\n";
    int k = 2;
    Eigen::Map<Eigen::MatrixXd, 0, Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>> 
        mp(m.data(), sz, sz/k, Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>( k*m.cols(),1));

    std::cout << mp << "\n\n";

    Eigen::MatrixXd m2 = mp;

    std::cout << m2 << "\n\n";

    return 0;
}