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

Matrix 从特征矩阵或向量中选择每个第k个元素?,matrix,eigen,Matrix,Eigen,在Eigen中,我有一个M x kN实矩阵,存储在默认列主顺序中。M行中的每一行包含N个k元组;例如,对于k=3,a0 b0 c0 a1 b1 c1。。。一个bN cN 如何提取向量或矩阵,其行或列是包含每个第k个元素的一组kN向量;例如,A0A1。。。安,B0B1。。。bN等 64位Windows 7,Visual C++使用Eigen::Map并将外部跨步设置为k*m.cols 我想你指的是国会议员的k*m.rows。通过这种更改,我得到每个元组的正确第一个元素。获取第二个、…、第k个元素的

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

如何提取向量或矩阵,其行或列是包含每个第k个元素的一组kN向量;例如,A0A1。。。安,B0B1。。。bN等

64位Windows 7,Visual C++

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


我想你指的是国会议员的k*m.rows。通过这种更改,我得到每个元组的正确第一个元素。获取第二个、…、第k个元素的最简单方法是什么?获取第pth个元素的最简单方法是将m.data+p传递给Map。其工作原理与广告中的一样。现在我只需要一个用于map Visual Studio.natvis文件的可视化工具。我想要的第p个元素由m.data+p*m.rows访问,因为m是按列主顺序存储的,而不是按行主顺序存储的。
#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;
}