为什么Eigen(版本3.2.5)不能得到正确的转置矩阵
Why Eigen (version 3.2.5) cannot get correct transposed matrix
我正在使用特征库来做基本的矩阵操作。然而,我甚至不能从一个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
结果很奇怪。我想知道我的代码有什么问题?我想艾根不可能有这么明显的缺陷。
这是由混叠效果引起的,类似于您这样做会发生的情况:
for(int i = 0; i < a.size(); i++)
a[i] = a[a.size()-1-i];
您有几种方法可以规避此问题。不太可取的方法是使用临时的:
m = m.transpose().eval();
或者,更好的是,告诉Eigen它是相同的矩阵并使用
m.transposeInPlace();
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 转置矩阵:交换元素不会更改值
- 为什么Eigen不能解析内置符号?(all、last、seq等)
- MKL矩形矩阵Inplace转置:不使用多个核心
- ActiveX OCX可以在释放模式内置时注册,但不能在调试模式下注册
- 外置"C"时不能使用 cout/endl
- 为什么自动类型不能与c++语句中的其他内置类型共存
- 为什么Eigen(版本3.2.5)不能得到正确的转置矩阵
- 在 EIGEN 中,c++ 不能将向量乘以它的转置