我想将特征密集矩阵写入 C++ 向量。 我可以预先分配一个 C++ 向量,但似乎我不能在特征矩阵上做到这一点。 我需要预先分配,因为我有我的理由。所以我想将行主有序矩阵映射到向量中。
我用matrixXd.data()将矩阵的地址写成向量
它打印给我一个地址。
我如何访问它的元素?例如,我想将它们存储在另一个 C++ 向量中
我尝试过:
vector<double> array;
for (int i=0; i<6; i++){
array[i] = *mat.data() + i*sizeof(double);
}
但是它给了我分段错误。
除了代码中的错误以及关于正确使用
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 的显式矢量化,尽管编译器可能仍会尝试这样做。