如何将 Eigen::Matrix 映射到 std::vector<Eigen::vector>?
how to map a Eigen::Matrix to std::vector<Eigen::vector>?
,例如,如果我的 Eigen::MatrixXd
大小为10列和3行,我该如何将其与Eigen::Vector3d
的10个元素的std::vector
相提并论?当我说别名时,是指在不复制的情况下使用相同的内存块。
我知道我可以通过以下内容进行反向映射:
std::vector<Vector3d> v(10);
...
Map<Matrix<double,3,Dynamic> > m(v.data().data(), 3, 10);
但是,如果我有一个eigen ::矩阵,我尝试将其转换为eigen :: vector的向量,但是以下代码行失败了
Eigen::Matrix2Xd points;
...
std::vector<Eigen::Vector2d> v_points(points.data()
Eigen::aligned_allocator<Eigen::vector2d>(points_data()))
使用自定义分配器,如上所述:是否可以通过已分配的内存初始化std ::向量?
为此,您必须将其重新解释为Vector3d*
:
Vector3d* buf = reinterpret_cast<Vector3d*>(mat.data());
然后将其传递给您的自定义分配器:
std::vector<Vector3d, PreAllocator<Vector3d>> my_vec(10, PreAllocator<Vector3d>(buf, 10));
另一个选项是将其包装在某些视图中,例如std::vector
,例如gsl::span
:
gsl::span<Vector3d> view(buf,mat.cols());
在这两种情况下,mat
对象在std::vector
或span
的整个生命中必须保持活力。
有关完整性,您也可以在std::vector
中深入复制它:
std::vector<Vector3d> v(10);
Matrix<double,3,Dynamic>::Map(v.data().data(),3,10) = mat;
相关文章:
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- 将数据从 std::Vector 存储到 Eigen::Vector 时出错
- C++:如何将 std::vector 操作转换为 Eigen::VectorXf?
- 以 Eigen::Vector 作为参数
- Eigen::MatrixXd.block assignment using a std::vector
- 将 Eigen::P ermutationMatrix.indices() 转换为 array/vector
- 如何将 Eigen::Matrix 映射到 std::vector<Eigen::vector>?
- 何时使用 Eigen::Vector vs std::vector
- 有一个具有映射到 std::vector 属性的 Eigen::matrix 属性的类
- Create Eigen::Ref from std::vector
- 将PCL点类型XYZ转换为EIGEN VECTOR 4F
- 将数据从 std::vector 复制到 Eigen's MatrixXd in C++
- 在 odeint 中使用 std::vector<Eigen::Vector3d> 作为状态类型
- 使用 std::vector<Eigen::MatrixXd 进行内存管理>
- 如何从Eigen中的索引向量中提取子向量(Eigen::Vector)
- 将Eigen::VectorXd类型转换为std::vector
- Eigen+std::vector+OpenMP的内存泄漏
- 用std::vector初始化Eigen::vector
- 为Eigen和std::vector编写模板函数
- 对Eigen::Vector类型使用Boost累加器