EIgen:Matricx和vector类的定义和使用
在Eigen中,所有矩陣和向量均為Matrix模板類的對象,向量是矩陣的行(或列)為1是的特殊情況。
1、矩陣的三參數(shù)模板
Matrix類有六個模板參數(shù),其中三個有默認(rèn)值,因此只要學(xué)習(xí)三個參數(shù)就足夠了。強制性的三參數(shù)模板的原型為:
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>三個參數(shù)分別表示:標(biāo)量的類型,編譯時的行,編譯時的列。
用typedef定義了很多模板,例如:Matrix4f 表示 4×4 的floats 矩陣:
typedef Matrix<float, 4, 4> Matrix4f;2、向量(Vectors)
向量是矩陣的特殊情況,也是用矩陣定義的。定義如下:
typedef Matrix<float, 3, 1> Vector3f; typedef Matrix<int, 1, 2> RowVector2i;3、特殊動態(tài)值(special value Dynamic)
Eigen的矩陣不僅能夠在編譯是確定大小(fixed size),也可以在運行時確定大小,就是所說的動態(tài)矩陣(dynamic size)。動態(tài)矩陣定義如下:
typedef Matrix<double, Dynamic, Dynamic> MatrixXd; typedef Matrix<int, Dynamic, 1> VectorXi;也可使用‘行’固定‘列’動態(tài)的矩陣:
Matrix<float, 3, Dynamic>4、構(gòu)造函數(shù)(Constructors)
可以使用默認(rèn)的構(gòu)造函數(shù),不執(zhí)行動態(tài)分配內(nèi)存,也沒有初始化矩陣參數(shù):
Matrix3f a; MatrixXf b;- a 是3-by-3矩陣,包含未初始化的 float[9] 數(shù)組
- b是動態(tài)矩陣,當(dāng)前大小為 0-by-0, 沒有為數(shù)組的系數(shù)分配內(nèi)存
矩陣的第一個參數(shù)表示“行”,數(shù)組只有一個參數(shù)。根據(jù)跟定的大小分配內(nèi)存,但不初始化。
MatrixXf a(10,15); VectorXf b(30);- a 是10-by-15陣,分配了內(nèi)存,沒有初始化
- b是動態(tài)矩陣,當(dāng)前大小為 30, 分配了內(nèi)存,沒有初始化
對于給定的矩陣,傳遞的參數(shù)無效,如:
Matrix3f a(3,3);對于維數(shù)最大為4的向量,可以直接初始化:
Vector2d a(5.0, 6.0); Vector3d b(5.0, 6.0, 7.0); Vector4d c(5.0, 6.0, 7.0, 8.0);5、系數(shù)訪問
系數(shù)都是從0開始:
#include <iostream> #include <Eigen/Dense> using namespace Eigen; int main() {MatrixXd m(2,2);m(0,0) = 3;m(1,0) = 2.5;m(0,1) = -1;m(1,1) = m(1,0) + m(0,1);std::cout << "Here is the matrix m:\n" << m << std::endl;VectorXd v(2);v(0) = 4;v(1) = v(0) - 1;std::cout << "Here is the vector v:\n" << v << std::endl; }矩陣默認(rèn)按列存儲。
operator[] 在 vectors 中重載。matrix[i,j]和matrix[j]含義相同。
6、逗號分隔的初始化
Matrix3f m; m << 1, 2, 3,4, 5, 6,7, 8, 9; std::cout << m;7、Resizing
可以用rows(), cols() and size() 改變現(xiàn)有矩陣的大小。這些類方法返回行、列、系數(shù)的數(shù)值。也可以用resize()來改變動態(tài)矩陣的大小。
總結(jié)
以上是生活随笔為你收集整理的EIgen:Matricx和vector类的定义和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旋转矩阵、欧拉角、四元数、轴/角之间的转
- 下一篇: 汇编语言之堆栈框架