Eigen::Matrix3d::Random();
生成3x3随机矩阵
Eigen::Matrix3d::Constant(n);
生成3x3常数矩阵
Matrix模板类
typedef Matrix<float 4,4> Matrix4f;
Vector2d a(5.0,6.0);
生成2x1的向量,值为5.0,6.0
Matrix<int 5,1> b = {1,2,3,4,5};
生成5x1的矩阵,值为1,2,3,4,5
MatrixXi a{{1,2},{3,4}};
生成2x2的矩阵
Matrix<double 2,2> b {{1,2},{3,4}};
生成2x2矩阵
m.resize(n,n);
resize后,数据丢失
m.reshaped(n,m);
reshaped后,数据不丢失,reshape的顺序有点奇怪
m.rows() m.cols()
获取列,行
+ - += -=
与numpy运算方法相同,矩阵间的运算
/ * /= *=
与常数的运算
m.transpose()
转置
m.conjugate()
共轭
m.transposeInPlace();
转置重写
m.sum();
m.prod();
m.mean();
m.minCoeff();
m.maxCoeff();
m.trace();
std::ptrdiff_t i.j; // Eigen::Index i,j;
float minOfM = m.minCoeff(&i,&j);
返回最小值与其下标
Array 具体形式与Matrix相同,但相乘时,array1 * array2 是对应位置点乘
a.abs()
a.sqrt().sin().cos()
(m.array() + 4).matrix() *m
array与matrix转化的复合操作
m.block(i,j,w,h)
块操作,start,start,w,h
m.block(i0,j0,w,h) = m.block(i1,j1,w,h)
m.row(i) m.col(i);
取行和列
m.leftCols(2);
左边的2列
m.bottomRows(2);
下面的2行
v.head(3)
vector前3个
v.tail(3)
vector后3个
v.segment(1,4)
vector1~4的单元
切片
seq(firstIdx,lastIdx) <=> seq(2,5)<=> {2,3,4,5}
seq(firstIdx,lastIdx,incr) <=> seq(2,8,2)<=>{2,4,6,8}
seqN(firstIdx,size) <=> seqN(2,5) <=> {2,3,4,5,6}
seqN(firstIdx,size,incr) <=> seqN(2,3,3) <=> {2,5,8}
Eigen::placeholders::
A(seq(i,last),seqN(0,n));
A(last/2,Eigen::placeholders::all);
(a>0).all()
(a>0).any()
(a>0).count()
m.colwise().maxCoeff();
按列操作,求最大值
m.colwise().sum().maxCoeff(&maxIndex);
按列操作,求最大值与最大值索引