C++ 特征矩阵切片和数据()

C++ 特征矩阵切片和数据(),c++,eigen,eigen3,C++,Eigen,Eigen3,假设我有一个Eigen::MatrixXd m,我可以通过m.row(I)得到它的第I行。我还可以通过auto p=m.row(I).data()获取指向该切片的指针。这将返回指向行的第一个元素的指针。然而,在这一点上,由于MatrixXd以col-major保存数组,因此该指针不会指向矩阵行的连续块,我稍后将使用该块传入一个Eigen::Map函数 例如,我想做什么 auto m2 = Eigen::Map<MatrixXd>(p, rows, cols); auto m2=Ei

假设我有一个
Eigen::MatrixXd m
,我可以通过
m.row(I)
得到它的第I行。我还可以通过
auto p=m.row(I).data()
获取指向该切片的指针。这将返回指向行的第一个元素的指针。然而,在这一点上,由于MatrixXd以col-major保存数组,因此该指针不会指向矩阵行的连续块,我稍后将使用该块传入一个Eigen::Map函数

例如,我想做什么

auto m2 = Eigen::Map<MatrixXd>(p, rows, cols);
auto m2=Eigen::Map(p,行,列);
我将无法得到我想要的,因为连续块与行的视图不对应

这是故意的行为吗?我想唯一的办法是先转置它,然后取而代之的是col?效率会低吗

编辑:转置将不起作用,它还返回指向相同数组的指针,该数组的顺序相同


一个更广泛的问题。使用Eigen时,我经常需要从矩阵到张量来回转换,我是通过张量映射和映射实现的。然而,当我处理数据切片时,比如说将一行矩阵转换成张量类型,实现这一点的最佳方法是什么?使用上述映射方法不起作用,因此我想我需要进行一些复制?

这样做有意义吗:

auto m2=Map(m,行,列)

或者简单地说:

矩阵m2=m

然后,您应该能够获得一个指向与您的行对应的连续内存块的指针


auto p=m2.row(i).data()

这样做有意义吗:

auto m2=Map(m,行,列)

或者简单地说:

矩阵m2=m

然后,您应该能够获得一个指向与您的行对应的连续内存块的指针

auto p=m2.row(i).data()