将 Eigen::MatrixXf 转换为二维 std::vector

Converting Eigen::MatrixXf to 2D std::vector

有比点对点复制值更优雅的解决方案吗?!
这样的东西适用于一维向量...

vector<float> vec(mat.data(), mat.data() + mat.rows() * mat.cols());

我尝试了 GCC 编译器为 vector 建议的各种其他替代方案,但没有任何效果...

Eigen::MatrixXf 使用高效的线性内存,而 vectorvector 将代表一种非常不同的数据类型。

对于多维向量,您必须逐块读取矩阵并将这些值复制到最外面的向量。

另一种方法是将值复制到具有特定访问器的基于 vector 的 class ......但这最终会重建一个矩阵,如 class.

你为什么要这样做?您要提供哪种访问权限?也许您应该尝试使用 eigen::matrix 接口

进行类似的访问

转化

Eigen::MatrixXf m(2,3);
std::vector<std::vector<T>> v;

for (int i=0; i<m.rows(); ++i)
{
    const float* begin = &m.row(i).data()[0];
    v.push_back(std::vector<float>(begin, begin+m.cols()));
}