美文网首页
Eigen, 矩阵和向量

Eigen, 矩阵和向量

作者: Young1217 | 来源:发表于2018-10-06 20:29 被阅读0次

    Eigen中,所有矩阵和向量都是Matrix模板类的对象。向量只是矩阵的一种特殊情况,有1行或1列。

    参见官网内容,以下内容为谷歌翻译出来的,最好参见官网内容。

    C++矩阵库 Eigen 快速入门

    Matrix的前三个模板参数

    矩阵类需要六个月模板参数,但现在它已经足够了解的前三个第一参数。其余三个参数都有默认值,现在我们将保持不变,我们将在下面讨论

    Matrix的三个必需模板参数是:

    Matrix <typename Scalar,int RowsAtCompileTime,int ColsAtCompileTime>

    Scalar是标量类型,即系数的类型。也就是说,如果你想要一个浮点矩阵,请选择float这里。有关所有支持的标量类型的列表以及如何扩展对新类型的支持,请参阅标量类型。

    RowsAtCompileTime并且ColsAtCompileTime是编译时已知的矩阵的行数和列数(如果在编译时未知该数字,请参见下文)。

    我们提供了很多方便的typedef来涵盖通常情况。例如,Matrix4f是浮动的4x4矩阵。以下是Eigen的定义:

    typedef Matrix <float,4,4> Matrix4f ;

    我们在下面讨论这些方便的typedef。

    矢量

    如上所述,在Eigen中,向量只是矩阵的一种特殊情况,具有1行或1列。他们有1列的情况是最常见的; 这种矢量称为列矢量,通常缩写为矢量。在他们有1行的另一种情况下,它们被称为行向量。

    例如,便捷typedef Vector3f是3个浮点数的(列)向量。它由Eigen定义如下:

    typedef Matrix <float,3,1> Vector3f ;

    我们还为行向量提供了方便的typedef,例如:

    typedef Matrix <int,1,2> RowVector2i ;

    特殊值动态

    当然,Eigen不限于在编译时已知尺寸的矩阵。在RowsAtCompileTime和ColsAtCompileTime模板参数可以采取特殊值Dynamic这表明大小在编译时是未知的,所以必须作为运行时变量来处理。在本术语中,这种大小称为动态 大小 ; 而在编译时已知的大小称为固定 大小。例如,便捷typedef MatrixXd,即具有动态大小的双精度矩阵,定义如下:

    typedef Matrix <double,Dynamic,Dynamic> MatrixXd ;

    同样,我们定义了一个不言自明的typedef VectorXi如下:

    typedef Matrix <int,Dynamic,1> VectorXi ;

    您可以完美地拥有例如具有动态列数的固定行数,如下所示:

    Matrix <float,3,Dynamic>

    构造函数

    默认构造函数始终可用,从不执行任何动态内存分配,也从不初始化矩阵系数。你可以做:

    Matrix3f a;

    MatrixXf b;

    这里,

    a 是一个3乘3的矩阵,具有未初始化系数的普通浮点数[9],

    b 是一个动态大小的矩阵,其大小目前是0乘0,并且其系数数组尚未分配。

    也可提供尺寸合同的建筑商。对于矩阵,始终首先传递行数。对于矢量,只需传递矢量大小。它们使用给定的大小分配系数数组,但不自行初始化系数:

    MatrixXf a(10,15);

    VectorXf b(30);

    这里,

    a 是一个10x15动态大小的矩阵,具有已分配但当前未初始化的系数。

    b 是一个大小为30的动态大小向量,具有已分配但当前未初始化的系数。

    为了在固定大小和动态大小的矩阵上提供统一的API,在固定大小的矩阵上使用这些构造函数是合法的,即使在这种情况下传递大小是无用的。所以这是合法的:

    Matrix3f a(3,3);

    并且是无操作的。

    最后,我们还提供了一些构造函数来初始化大小为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);

    系数访问器

    Eigen中的主要系数访问器和增变器是重载的括号运算符。对于矩阵,行索引始终首先传递。对于向量,只需传递一个索引。编号从0开始。


    逗号初始化

    可以使用所谓的逗号初始化器语法方便地设置矩阵和向量系数。

    调整

    可以通过rows()cols()size()检索矩阵的当前大小。这些方法分别返回行数,列数和系数数。调整动态大小矩阵的大小resize()方法完成。

    分配和调整大小

    相关文章

      网友评论

          本文标题:Eigen, 矩阵和向量

          本文链接:https://www.haomeiwen.com/subject/xyahaftx.html