如何返回动态特征数组

时间:2017-11-18 11:26:01

标签: arrays eigen

我只是偶然发现了动态特征矩阵的一个问题。我必须从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中的任何可靠数据。有什么办法可以从数组中创建一个特征矩阵,这样当返回时,特征矩阵的数据就会被保留下来吗?

1 个答案:

答案 0 :(得分:1)

只需返回Matrix对象:

RowVectorXd returnArray() {
  double array[4] = {0, 1, 2, 3};
  return Eigen::Map<RowVectorXd>(array, 1, 4);
}

Map对象引用的数据将被深深复制到返回的Matrix对象中。