我只是偶然发现了动态特征矩阵的一个问题。我必须从C数组创建此数组。 Eigen提供Eigen :: Map用于与原始缓冲区连接。我想从以下函数返回一个特征矩阵:
Eigen::Map<Eigen::Matrix<double, 1, Eigen::Dynamic> returnArray() {
double array[4] = {0, 1, 2, 3};
Eigen::Map<Eigen::Matrix<double, 1, Eigen::Dynamic, Eigen::RowMajor> > J_full(array, 1, 4); // the sizes aren't actually known at compile time hence the dynamic array
return J_full
}
我遇到的问题是数组中的数据不会被复制,但指向数组的指针会传递给Map构造函数。现在我假设一旦我退出这个函数的范围,C数组将被破坏,因此不会有从函数返回的特征矩阵I中的任何可靠数据。有什么办法可以从数组中创建一个特征矩阵,这样当返回时,特征矩阵的数据就会被保留下来吗?
答案 0 :(得分:1)
只需返回Matrix
对象:
RowVectorXd returnArray() {
double array[4] = {0, 1, 2, 3};
return Eigen::Map<RowVectorXd>(array, 1, 4);
}
Map
对象引用的数据将被深深复制到返回的Matrix
对象中。