Eigen网址:
https://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html
可以查阅相关类的介绍以及API
使用:
51 //initialize
52 std::map<int, Eigen::VectorXf> mp;
53 mp[1].resize(400);
54
55 Eigen::VectorXf x1;
56 cout << "size:" << x1.size() << endl;
57
58 Eigen::Vector2d u(-2, 3), v(4, 5);
59
60 Eigen::MatrixXd m(2, 3);//2行3列
61 m << 1, 11, 12, //初始化
62 2, 22, 23;
63
64 //assign
65 m(0, 0) = 2;
66 Eigen::VectorXf x;
67 x.resize(3);
68 for (int i = 0; i < 2; ++i)
69 x(i, 0) = i;
70 cout << "size:" << x.size() << endl;
71 cout << "data:" << *(x.data()) << " " << *(x.data()+1) << endl;
72 x.resize(0);
73 cout << "size:" << x.size() << endl;
76 //arithmetic
77 cout << "+\n" << u + v << endl;;
78 cout << "-\n" << u - v << endl;;
79 cout << "*\n" << u * 2 << endl;
80 cout << "/\n" << u / 2 << endl;
81
82 cout << "T\n" << u.transpose() << endl;
83 cout << "-\n" << u.conjugate() << endl;
84 cout << "*\n" << u.adjoint() << endl;
85
86 //multiplication
87 cout << "transpose\n" << u.transpose() * v << endl;
88 cout << "dot\n" << u.dot(v) << endl;
89
90 //math
91 cout << "sum\n" << u.sum() << endl;
92 cout << "mean\n" << u.mean() << endl;
93 cout << "trace\n" << u.trace() << endl;//对角线和
94 cout << "prod\n" << u.prod() << endl;//各元素间乘积
95
96 //Similarity
97 cout << "lpNorm---------" << endl;
98 cout << (u - v).lpNorm<1>() << endl;
99 cout << (u - v).lpNorm<2>() << endl;
100 cout << (u - v).lpNorm<Eigen::Infinity>() << endl;
101
102 cout << "dot---------" << endl;
103 cout << u.dot(v) << endl;
105 //pearson
106 float mean1 = u.mean();
107 float mean2 = v.mean();
108 auto r1 = (u.array() - mean1);
109 auto r2 = (v.array() - mean2);
110 float t_dot = r1.matrix().dot(r2.matrix());
111
112 Eigen::Vector2d t_v1 (r1.pow(2));
113 Eigen::Vector2d t_v2 (r2.pow(2));
114
115 cout << "pearson---------" << endl;
116 float t_dot2 = std::sqrt(t_v1.sum() * t_v2.sum());
119 t_dot2 = std::sqrt(t_dot2);
120 cout << "t_dot2 " << t_dot2 << endl;
121 float res = t_dot / t_dot2;
122 cout << res << endl;
124 //cos
125 float c_v = u.dot(v);
126 Eigen::Vector2d t_c1 (r1.pow(2));
127 Eigen::Vector2d t_c2 (r2.pow(2));
128 cout << "cos---------" << endl;
129 cout << c_v / std::sqrt(t_c1.sum() * t_c2.sum()) << endl;
类关系:
Matrix类,继承于PlainObjectBase;
PlainObjectBase最终会使用MatrixBase/ArrayBase
MatrixBase继承于DenseBase
因此看接口的话,可以看DenseBase,MatrixBase,Matrix类