概述
本页讨论了几种用于初始化矩阵的高级方法。它提供了之前介绍的逗号初始化器的更多细节。它还解释了如何获得特殊矩阵,例如单位矩阵和零矩阵。
1 逗号初始化程序
Eigen提供逗号初始化语法,允许用户轻松设置矩阵,向量或数组的所有系数。只需列出系数,从左上角开始,从左到右,从上到下移动。需要事先指定对象的大小。如果列出的系数太少或太多,Eigen会抱怨。
而且,初始化列表的元素本身可以是向量或矩阵。常见的用途是将矢量或矩阵连接在一起。例如,以下是如何将两个行向量连接在一起。请记住,必须先设置大小才能使用逗号初始值设定项。
我们可以使用相同的技术来初始化具有块结构的矩阵。
逗号初始值设定项也可用于填充块表达式,例如 m.row(i)。这是获得与上面第一个示例相同结果的更复杂方法:
2.特殊矩阵和数组
2.1 矩阵和阵列类具有静态方法等Zero(),其可用于所有系数初始化到零。有三种变体。
第一个变量不带参数,只能用于固定大小的对象。如果要将动态大小对象初始化为零,则需要指定大小。
第二个变体需要一个参数,并且可以用于一维动态大小的对象,
第三个变体需要两个参数,并且可以用于二维对象。以下示例说明了所有三种变体:
2.2 类似地,静态方法Constant(value)将所有系数设置为value
如果需要指定对象的大小,则附加参数将在value参数之前,如
MatrixXd::Constant(rows, cols, value). Random()方法用随机系数填充矩阵或数组。
行 列 值
可以通过调用Identity()获得单位矩阵;
此方法仅适用于Matrix,不适用于Array,因为“单位矩阵”是线性代数概念。
LinSpaced(size, low, high)仅适用于向量和一维数组;
它产生一个指定大小的向量,其系数在low和high之间等间隔size。方法LinSpaced() 在下面的示例中进行了说明,该示例打印一个表格,其角度为度,相应的角度为弧度,以及它们的正弦和余弦。
此示例显示可以将LinSpaced()返回的对象分配给变量(和表达式)。Eigen定义了实用函数,如setZero(),MatrixBase :: setIdentity()和DenseBase :: setLinSpaced(),可以方便地执行此操作。以下示例对比了构造矩阵的三种方法
使用静态方法和赋值, 使用静态方法和逗号初始化程序, 或使用setXxx()方法。
3. 用作临时对象
如上所示,静态方法如Zero()和Constant()可用于在声明时或在赋值运算符的右侧初始化变量。您可以将这些方法视为返回矩阵或数组; 实际上,它们返回所谓的表达式对象,在需要时可以计算矩阵或数组,因此这种语法不会产生任何开销。
这些表达式也可以用作临时对象。
最后
以上就是听话鞋子为你收集整理的Eigen官网教程 (4) 高级初始化的全部内容,希望文章能够帮你解决Eigen官网教程 (4) 高级初始化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复