1、声明与赋值
1.1、声明
1.1.1、在编译期不确定矩阵(向量)大小,如下
MatrixXd mat;
Matrix<double, Dynamic, Dynamic> mat;
VectorXd v;
1.1.2、在编译期确定矩阵(向量)大小
MatrixXd mat(2,4);
Matrix<double, 2, 4> mat;
VectorXd v(4);
1.2.赋值
1.2.1、输入运算符赋值
mat << 1, 2,
3, 4,
8, 5,
6, 9;
v << 1, 2, 3, 4;
1.2.2、小括号赋值
mat(0, 0) = 1;
mat(0, 1) = 1;
v(0) = 0;
注:只有在编译期确定大小后,才可对矩阵直接进行赋值;如果声明变量没有确定大小那必须在resize给定大小后才可赋值
2、规约操作
2.1、基本规约
矩阵和向量都常用的操作有:求和、求平均、求最大最小值,求最大最小索引下标,向量还有平方范数和范数
MatrixXd mat(2,2);
mat << 1, 2, 3, 4;
std::cout << mat.mean() << std::endl;
std::cout << mat.sum() << std::endl;
std::cout << mat.minCoeff() << std::endl;
std::cout << mat.maxCoeff() << std::endl;
int max = mat.maxCoeff(&maxrow, &maxcol);
int min = mat.minCoeff(&minrow, &mincol);
VectorXd v(2);
v << 2, 2;
std::cout << v.mean() << std::endl;
std::cout << v.sum() << std::endl;
std::cout << v.minCoeff() << std::endl;
std::cout << v.maxCoeff() << std::endl;
std::cout << v.norm() << std::endl;
std::cout << v.norm() << std::endl;
2.2、列/行规约
以列为单位进行操作
MatrixXd mat(2,2);
mat << 1, 2, 3, 4;
std::cout << mat.colwise().sum() << std::endl;
以行为单位进行操作
MatrixXd mat(2,2);
mat << 1, 2, 3, 4;
std::cout << mat.rowwise().sum() << std::endl;
MatrixXd mat(2,2);
mat << 1, 2, 3, 4;
VectorXd v(2);
v << 2, 2;
mat.colwise() += v;
std::cout << mat<< std::endl;
|