我有一个 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/