题目回顾:
假设有一个大的Eigen矩阵,我想把它的左上角3x3块提取出来,然后赋值为I3x3。编程实现.
解:提取大矩阵左上角3x3矩阵,有两种方式:
1、直接从0-2循环遍历大矩阵的前三行和三列
2、用矩阵变量.block(0,0,3,3)//从左上角00位置开始取3行3列
具体代码实现:
#include<iostream> /*提取大矩阵左上角3x3矩阵,有两种方式:
1、直接从0-2循环遍历大矩阵的前三行和三列
2、用矩阵变量.block(0,0,3,3)//从左上角00位置开始取3行3列
*/ //包含Eigen头文件
#include<Eigen/Core>
#include<Eigen/Geometry> #define MATRIX_SIZE 30
using namespace std; int main(int argc,char **argv)
{
//设置输出小数点后3位
cout.precision();
Eigen::Matrix<double,MATRIX_SIZE, MATRIX_SIZE> matrix_NN = Eigen::MatrixXd::Random(MATRIX_SIZE,MATRIX_SIZE);
Eigen::Matrix<double,,>matrix_3d1 = Eigen::MatrixXd::Random(,);//3x3矩阵变量
Eigen::Matrix3d matrix_3d = Eigen::Matrix3d::Random();//两种方式都可以
/*方法1:循环遍历矩阵的三行三列 */
for(int i = ;i < ; i ++){
for(int j = ;j < ;j++){
matrix_3d(i,j) = matrix_NN(i,j);
cout<<matrix_NN(i,j)<<" ";
}
cout<<endl;
}
matrix_3d = Eigen::Matrix3d::Identity();
cout<<"赋值后的矩阵为:"<<matrix_3d<<endl; /*方法2:用.block函数 */
/*
cout<<"提取出来的矩阵块为:"<<endl;
cout<< matrix_NN.block(0,0,3,3) <<endl; //提取后赋值为新的元素
matrix_3d = matrix_NN.block(0,0,3,3);
matrix_3d = Eigen::Matrix3d::Identity();
cout<<"赋值后的矩阵为:"<<endl<<matrix_3d;
*/
return ;
}