1.6Eigen中系数运算Reductions, visitors and broadcasting

 1 Eigen::Matrix2d mat;
 2 mat<<1,2,
 3            3,4;
 4 cout<<"矩阵所有系数之和:"<<mat.sum();//1+2+3+4=10
 5 cout<<"矩阵系数的乘积:"<<mat.prod();//1*2*3*4=24
 6 cout<<"矩阵系数的平均数:"<<mat.mean();//(1+2+3+4)/10=2.5
 7 cout<<"矩阵最小的系数:"<<mat.minCoeff();//1
 8 cout<<"矩阵最大的系数:"<<mat.maxCoeff();//4
 9 cout<<"矩阵的迹:"<<mat.trace();//1+4=5
10 VectorXf v(2);
11 MatrixXf m(2,2),n(2,2);
12 v<<-1,2;
13 m<<1,-2,
14        -3,4;
15 cout<<"向量v的系数平方和:"<<v.squaredNorm();//(-1)^2+2^2=5
16 cout<<"向量v的系数平方和开方:"<<v.norm();//((-1)^2+2^2)^0.5=2.23607
17 cout<<"向量v的p次方和:"<<v.lpNorm<1>();//模板函数,1为一次方和,3为三次方和, 结果xiang为3
18 cout<<"向量v系数绝对值最大值:"<<v.lpNorm<Infinity>();//2
19 cout<<"矩阵m系数平方和:"<<m.squareNorm();//30
20 cout<<"矩阵m系数平方和再开方:"<<m.norm();//5.47723
21 cout<<"矩阵m的p次方和:"<<m.lpNorm<1>();//模板函数,1为矩阵系数绝对值之后,其他为N次方之和
22 cout<<"矩阵m系数绝对值最大值:"<<m.lpNorm<Infinity>();//4
23 Eigen::Matrix2d mat;
24 mat<<1,-2,
25           -3,4;
26 cout<<"矩阵系数取绝对值:"<<mat.cwiseAbs();//mat=(1,2,3,4)
27 ArrayXXf a(2,2);
28 mat<<1,2,
29           3,4;
30 cout<<"如果数组所有系数大于0,返回true,否则返回false"<<(a>0).all();//true
31 cout<<"如果数组存在一个系数大于0,返回true,否则返回false"<<(a>0).any();//true
32 cout<<"返回数组大于0的系数的个数"<<(a>0).count();//4
33 cout<<"如果数组所有系数大于2,返回true,否则返回false"<<(a>2).all();//0
34 cout<<"如果数组存在一个系数大于2,返回true,否则返回false"<<(a>2).any();//true
35 cout<<"返回数组大于2的系数的个数"<<(a>2).count();//2
36 Eigen::MatrixXf m(2,2);
37 m<<1,2,
38         3,4;
39 MatrixXf::Index maxRow,maxCol,minRow,minCol;
40 float max=m.maxCoeff(&maxRow,&maxCol);
41 float min=m.minCoeff(&minRow,&minCol);
42 cout<<"矩阵中最大元素所在位置:("<<maxRow<<","<<maxCol<<")";//(1,1)
43 cout<<"矩阵中最小元素所在位置:("<<minRow<<","<<minCol<<")";//(0,0)
44 Eigen::MatrixXf m(2,4);
45 m<<1,2,6,9,
46         3,1,7,2;
47 cout<<"输出每一列的最大值:"<<m.colwise().maxCoeff();//3,2,7,9
48 cout<<"输出每一行的最大值:"<<m.rowwise().maxCoeff();//9,7
49 Eigen::MatrixXf m(2,4);
50 m<<1,2,6,9,
51        3,1,7,2;
52 MatrixXf::Index maxindex;
53 float max=m.colwise().sum().maxCoeff(&maxindex);
54 cout<<"矩阵每列系数和,然后每一列和的最大值的列数"<<maxindex;//第3列,即2
55 cout<<"输出第三列"<<m.col(maxindex);//6,7
56 cout<<"输出最大的和:"<<max;//13
57 Eigen::MatrixXf m(2,4),n(2,4);
58 Eigen::VectorXf v(2);
59 Eigen::RowVectorXf u(4);
60 m<<1,2,6,9,
61         3,1,7,2;
62 v<<0,1;
63 n<<0,1,2,3;
64 m.colwise()+=v;//m中每一列加向量v
65 n=m;
66 n.rowwise()+=u;
67 cout<<"矩阵每一列加向量v:"<<m;//1,2,6,9,4,2,8,3
68 cout<<"矩阵每一行加向量u:"<<n;//1,3,8,12,3,2,9,5
69 Eigen::MatrixXf m(2,4);
70 Eigen::VectorXf v(2);
71 m<<1,23,6,9,
72         3,11,7,2;
73 v<<2,3;
74 MatrixXf::Index index;
75 (m.colwise()-v).colwise().squareNorm().minCoeff(&index);
76 cout<<"求矩阵m每列距离向量V最小距离的一列"<<index;//0
77 cout<<"输出距离向量V最小的列向量:"<<m.col(index);//1,3

猜你喜欢

转载自www.cnblogs.com/excellentlhw/p/10629545.html