c++ - 在头文件中初始化常量特征矩阵

标签 c++ eigen

这是一个非 Eigen 用户可以回答的问题...

我想使用 Eigen API 在头文件中初始化常量矩阵,但 Eigen 似乎没有提供构造函数来实现这一点,以下是我尝试的方法:

// tried the following first, but Eigen does not provide such a constructor
//const Eigen::Matrix3f M<<1,2,3,4,5,6,7,8,9;
// then I tried the following, but this is not allowed in header file
//const Eigen::Matrix3f M;
//M <<1,2,3,4,5,6,7,8,9; // not allowed in header file

在头文件中实现此目的的替代方法是什么?

最佳答案

至少有两种可能性。第一个是使用 Eigen 的逗号初始化器功能:

Eigen::Matrix3d A((Eigen::Matrix3d() << 1, 2, 3, 4, 5, 6, 7, 8, 9).finished());

第二种是使用 Matrix3d(const double*) 构造函数从原始指针复制数据。在这种情况下,必须以与目标存储顺序相同的顺序提供值,因此在大多数情况下按列排列:

const double B_data[] = {1, 4, 7, 2, 5, 8, 3, 6, 9};
Eigen::Matrix3d B(B_data);

关于c++ - 在头文件中初始化常量特征矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999407/

相关文章:

c++ - Qt:在两个子线程之间使用信号和槽

c++ - 我是否必须使用我的数据库训练 Viola-Jones 算法以获得准确的结果?

c++ - Eigen - 排序矩阵对角线

c++ - 通过外部分配的数据调用 Eigen GEMM

c++ - C/C++ 中 >=、<= 与 <、>、== 操作的复杂性

c++ - SFML 2.1 - 检测单击鼠标并更改纹理

c++ - C++ 简明检查元素是否属于临时集

c++ - 如何在 C++ 中针对 x86 优化这三个矩阵的乘积?

c++ - Eigen 中没有复制乘法

c++ - 你如何使用 Eigen 中的 BandMatrix 类?