背景
最近接触到了矩阵库Eigen,在此记录一下使用中遇到的一些问题。
1. 块操作
MatrixXd M = MatrixXd::Zero(50, 50);
cout << M.block(2, 3, 5, 6) << endl; //指的是M矩阵从(2,3)位置开始,下数5个元素,右数6个元素
M.block(a, b, m ,n)
指的是从下标(a,b)
的元素开始,向下m
个元素,向右n
个元素。
2. 矩阵和C++数组转换
MatrxXd M = MatrixXd::Zero(50,50);
//矩阵转数组
double* test = M.data();
//数组转矩阵
Map<MatrixXd>tM(test, 50, 50);
注意,这两种转换方式都是浅拷贝,改变源数据的值拷贝后对象的值也会改变。
3. 矩阵输出到文件
Eigen重载了<<
,直接输出到文件即可。
MatrixXd M = MatrixXd::Zero(5, 5);
ofstream fout("test.txt");
fout << M;
fout.close();
测试结果:
测试结果
网友评论