c++ - 将数组映射回现有的特征矩阵

标签 c++ c eigen eigenvector eigenvalue

我想将 double 组映射到现有的 MatrixXd 结构。到目前为止,我已经设法将 Eigen 矩阵映射到一个简单的数组,但我找不到返回它的方法。

void foo(MatrixXd matrix, int n){

 double arrayd = new double[n*n];
 // map the input matrix to an array
 Map<MatrixXd>(arrayd, n, n) = matrix;  

  //do something with the array 
             .......
// map array back to the existing matrix

}

最佳答案

我不确定你想要什么,但我会尽力解释。

您在代码中混合了 double 和 float (MatrixXf 是一个矩阵,其中每个条目都是 float )。我暂时假设这是无意的,并且您想在任何地方都使用 double ;请参阅下文,了解这是否真的是您的意图。

指令Map<MatrixXd>(arrayd, n, n) = matrix复制 matrix 的条目进入arrayd .相当于循环

for (int i = 0; i < n; ++i)
   for (int j = 0; j < n; ++j)
      arrayd[i + j*n] = matrix(i, j);

复制 arrayd 的条目进入matrix ,您将使用反向赋值:matrix = Map<MatrixXd>(arrayd, n, n) .

但是,通常以下技术更有用:

void foo(MatrixXd matrix, int n) {
   double* arrayd = matrix.data();
   // do something with the array 
}

现在 arrayd 指向矩阵中的条目,您可以将其作为任何 C++ 数组进行处理。数据在 matrix 之间共享和 arrayd ,所以你不必在最后复制任何东西。顺便说一下,您不需要传递 n到函数 foo() ,因为它存储在矩阵中;使用 matrix.rows() 和 matrix.cols() 来查询它的值。

如果您确实想将 MatrixXf 复制到 double 组,则需要显式包含转换。 Eigen 中的语法是:Map<MatrixXd>(arrayd, n, n) = matrix.cast<double>() .

关于c++ - 将数组映射回现有的特征矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12003692/

相关文章:

c - 如何用 C 编写面向对象的代码?

c - S_ISREG 不适用于列表功能

c++ - Eigen C++/Matlab 四元数和旋转矩阵不匹配

c++ - 重用 Eigen 表达式模板

c++ - 如何写出可以和Eigen抗衡的matrix矩阵乘积?

c++ - 这两种创建 C++ 类的方法有什么区别?

c++ - 带重定位但不带 PIC 的可执行文件中共享库的引用函数

c++ - std::vector::shrink_to_fit() 不检查分配器相等性

c - 当我尝试实现 scanf() 时出现问题

c++ - 将参数限制为 C++ 中的特定类和派生类