我使用Eigen库进行基本矩阵操作。但是,我甚至无法从3 * 3矩阵中获得正确的转置矩阵。以下是一个简单的代码示例:
#include <iostream>
#include <Eigen/Core>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main(int argc, char *argv[])
{
Matrix3d m;
m << 1, 2, 3, 4, 5, 6, 7, 8, 9;
cout << "before transpose: " << endl;
cout << m;
cout << endl;
m = m.transpose();
cout << "after transpose: " << endl;
cout << m;
return 0;
}
打印结果为:
before transpose:
1 2 3
4 5 6
7 8 9
after transpose:
1 2 3
2 5 6
3 6 9
结果非常奇怪。我想知道我的代码有什么问题?我认为艾根不可能有这么明显的错误。
答案 0 :(得分:1)
由混叠效应引起的,类似于你所做的情况:
for(int i = 0; i < a.size(); i++)
a[i] = a[a.size()-1-i];
你有几种方法可以避免这种情况。不太可取的方法是使用临时的:
m = m.transpose().eval();
或更好地告诉Eigen它是相同的矩阵并使用
m.transposeInPlace();