本章介绍Eigen中的Array类。
Matrix类主要面向线性代数,Array类则提供更普遍意义上的数组操作,允许进行没有具体线代意义的系数级运算,例如给每个系数加上一个常数,或将两个数组按系数相乘等。
类型
Array的六个模板参数和Matrix一模一样,并且也定义了一些常用类型
ArrayNt
:表示一个一维数组,N
为数组大小,t
为数值类型ArrayNNt
:表示一个二维数组
1 | typedef Array<float, Dynamic, 1> ArrayXf; |
访问系数
与Matrix相同,Array也是通过重载括号运算符 ()
实现对数组系数的读写操作;重载 <<
操作符逗号初始化数组或打印数组。
加减法
与Matrix相同,当两个数组大小相同时操作有效,且加减法按系数进行;
与Matrix不同,Array也支持 array+scalar
的操作,即向Array中的每个系数加上同一个常数。
1 |
|
输出:
1 | a + b = |
乘法
array * scalar
或scalar * array
:同Matrixarray * array
:与Matrix不同。Matrix进行的是矩阵乘法,Array则是系数对应相乘。因此当且仅当两个数组维度相同时,才能相乘。
1 | int main() |
输出:
1 | a * b = |
其他系数级操作
参考Eigen手册 Quick Reference Guide : Coefficient-wise & Array operators
Array 与 Matrix 类型转换
- Array -> Matrix :
A.matrix()
- Matrix -> Array :
M.array()
Eigen禁止在一个表达式中混用Array和Matrix,唯一例外的是 赋值运算
,它允许Array和Matrix的互相赋值。
Eigen也为Matrix提供了一些 cwise*()
的方法使其允许直接进行系数级操作,类似 .array().*()