动态大小的Eigen::Matrix
将其值保存在连续的内存块中。我需要这些值作为我拥有的内存块。我目前使用std::memcpy
复制值。
#include <cstdlib>
#include <cstring>
#include <eigen3/Eigen/Core>
using RowMajorMatrixXf = Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
int main()
{
RowMajorMatrixXf mat(1024, 2048);
// ...
const std::size_t num_bytes = mat.rows() * mat.cols() * sizeof(float);
float* ptr = (float*)std::malloc(num_bytes); // raw ptr for simplicity
std::memcpy(ptr, mat.data(), num_bytes);
// ...
std::free(ptr);
}
然而,复制是不必要的,因为此时不再需要Eigen::Matrix
。如何获取Eigen Matrix内存的所有权,从根本上阻止Matrix对象释放其析构函数中的内存?
答案 0 :(得分:3)
您可以更好地分配自己的缓冲区,并使用Map
解释为特征矩阵:
float* ptr = new float[r*c];
Map<RowMajorMatrixXf> mat(ptr,r,c);
然后像RowMajorMatrixXf一样使用mat,除了它的真实类型不是RowMajorMatrixXf,所以你不能通过引用函数来传递它
为RowMajorMatrixXf&
或Ref<RowMajorMatrixXf>
使用Ref<const RowMajorMatrixXf>
。