c++ - 映射( reshape )静态特征矩阵

标签 c++ eigen eigen3

我有一个 2 x 4 矩阵,我想将其表示为 1 x 8 vector ,将 colPivHouseholderQr().solve 的结果放入其中,然后返回该 2 x 4矩阵。 我读过 this并尝试了以下操作:

Matrix<float, 2, 4> X;
Eigen::Map<Matrix<float, 1, 8>> X_vec(X.data(), 2, 4); // Run-time error
X_vec = A.colPivHouseholderQr().solve(b);
return X;

但是我在运行时遇到错误:

Assertion failed: v == T(Value), file eigen\eigen\src/Core/util/XprHelper.h, line 110

有没有办法做到这一点?

最佳答案

Eigen::Map 构造函数的第二个和第三个参数分别是 矩阵的行数和列数。对于固定大小的矩阵,它们应该与作为模板参数提供的那些相同。所以,你应该写:

Eigen::Map<Matrix<float, 1, 8>> X_vec(X.data(), 1, 8);

作为替代方案,您可以使用 overloaded constructor仅为 Eigen 记录的固定大小矩阵提供:

Eigen::Map<Matrix<float, 1, 8>> X_vec(X.data());

Constructor in the fixed-size case.

请注意,我建议您使用这个最新版本,因为它不太容易出错,并且如果您非常严格地阅读文档,其他重载仅适用于动态大小矩阵:

Constructor in the dynamic-size matrix case.

关于c++ - 映射( reshape )静态特征矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44861142/

相关文章:

c++ - TBB 并发无序映射导致段错误

c++ - 包括 Eigen

c++ - 为基本数据类型和 Eigen 数据类型编写模板函数

c++ - 特征:模板函数中 MatrixBase 的默认类型?

c# - 如何在 C++/CLI 或 C# 中将静态结构数据保存到二进制文件

c++ - 是否有一种规范的方法允许将非 const 模板参数类型隐式转换为 const 类型?

c++ - 删除动态数组时会发生什么?

c++ - Eigen::Matrix 与 uchar 类型的 cv::Mat 之间的转换

c++ - C++ 中的特征库给出错误 C2660 : 'Eigen::MatrixBase<Derived>::eigenvalues' : function does not take 2 arguments

c++ - 如何在多个内核中使用 Eigen::Tensor::convolve?