将 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
使用高效的线性内存,而 vector
的 vector
将代表一种非常不同的数据类型。
对于多维向量,您必须逐块读取矩阵并将这些值复制到最外面的向量。
另一种方法是将值复制到具有特定访问器的基于 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()));
}
有比点对点复制值更优雅的解决方案吗?!
这样的东西适用于一维向量...
vector<float> vec(mat.data(), mat.data() + mat.rows() * mat.cols());
我尝试了 GCC 编译器为 vector
Eigen::MatrixXf
使用高效的线性内存,而 vector
的 vector
将代表一种非常不同的数据类型。
对于多维向量,您必须逐块读取矩阵并将这些值复制到最外面的向量。
另一种方法是将值复制到具有特定访问器的基于 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()));
}