为什么Eigen(版本3.2.5)无法获得正确的转置矩阵

时间:2016-10-05 19:44:38

标签: c++ matrix eigen

我使用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

结果非常奇怪。我想知道我的代码有什么问题?我认为艾根不可能有这么明显的错误。

1 个答案:

答案 0 :(得分:1)

由混叠效应引起的,类似于你所做的情况:

for(int i = 0; i < a.size(); i++)
    a[i] = a[a.size()-1-i];

你有几种方法可以避免这种情况。不太可取的方法是使用临时的:

m = m.transpose().eval();

或更好地告诉Eigen它是相同的矩阵并使用

m.transposeInPlace();