将特征矩阵映射到C++向量

问题描述 投票:0回答:1

我想将特征密集矩阵写入 C++ 向量。 我可以预先分配一个 C++ 向量,但似乎我不能在特征矩阵上做到这一点。 我需要预先分配,因为我有我的理由。所以我想将行主有序矩阵映射到向量中。

我用matrixXd.data()将矩阵的地址写成向量

它打印给我一个地址。

我如何访问它的元素?例如,我想将它们存储在另一个 C++ 向量中

我尝试过:

vector<double> array;
for (int i=0; i<6; i++){
    array[i] = *mat.data() + i*sizeof(double);
}

但是它给了我分段错误。

c++ memory vector eigen
1个回答
0
投票

除了代码中的错误以及关于正确使用

std::vector
的讨论之外,这应该以有效的方式完成您想要的事情。

using RowMajorMatrixXd = Eigen::Matrix<
      double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
// could be any Eigen expression
RowMajorMatrixXd x = RowMajorMatrixXd::Random(4, 6);
// allocate vector with size x.rows() * x.cols()
std::vector<double> array(x.size());
// map vector as an Eigen matrix with the appropriate shape
// then assign the content of x
RowMajorMatrixXd::Map(array.data(), x.rows(), x.cols()) = x;

在评论中,建议使用

reshaped
。我建议避免这样做,因为它通常会产生非常低效的代码,因为映射索引可能相对昂贵,尤其是在编译时未知的情况下,并且它还禁用 Eigen 的显式矢量化,尽管编译器可能仍会尝试这样做。

© www.soinside.com 2019 - 2024. All rights reserved.