美文网首页c++
数组类(Array)和元素操作

数组类(Array)和元素操作

作者: 淡水鱼Ada | 来源:发表于2021-03-04 15:01 被阅读0次

数组类(Array)和元素操作

转载:
原文地址:http://eigen.tuxfamily.org/dox/group__TutorialArrayClass.html

Array 类有什么用?

Array 类提供了一个一般用途的数组,用于操作元素相关算法,就像 Matrix 专门用于实现线性代数算法。更具体一点,Array 提供了对元素进行操作的方法,这些操作大部分与线性代数算法无关。比如数组中每个元素都加一个常量或者两个同维数组对应元素相乘。

Array 类型

Array 是一个模板类,和Matrix有着相同的模板参数,前三个模板参数如下:
Array<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

模板参数的功能与 Matrix 相同,这里就不在重复解释。

与 Matrix 相同,Eigen 也内置了一些常用的 Array 对象,不过与 Matrix 不同指出在于Array同时定义了一维和二维Array。内置 Array 类型的任意维度均不大于4:

Array<float,Dynamic,1> ArrayXf 
Array<float,3,1> Array3f 
Array<double,Dynamic,Dynamic> ArrayXXd 
Array<double,3,3> Array33d 

Array 元素的引用

与 Matrix 相同,Array 重载了小括号以实现 Array 对象中元素的读写。同样,Array重载了 << 以实现 Array 的初始化或者打印(std::cout<<array;)。

更多有关初始化的话题请参考这里

加减运算

Array 的加减运算是 element-wise 的,也就是相同尺寸 Array 对应元素之间的加减。

Array 也提供了 Array 和标量之间的加减运算(这是与 Matrix 的不同之处):array+scalar,Array 每个元素都与 scalar 相加。

乘法运算

两个相同尺寸的 Array 对应元素之间的乘法。Matrix 中也有对应的方法:.cwiseProduct(.)

其他元素相关的运算

Array 提供了其他有用的元素相关的运算,例如,求元素绝对值的 abs()、求平方根的 sqrt()、求两个 Array 相同位置最小值的 min(.) 等,示例如下:

cout << a.abs() << endl;
cout << a.abs().sqrt() << endl;
cout << a.min(a.abs().sqrt()) << endl;

更多方法可参考:Quick reference guide

Matrix和Array之间的转换

Eigen 中 Matrix 和 Array 的职能不同,前者完成线性代数相关算法,后者完成元素相关的计算,你需要按照自己需求在二者之间进行选择。有些时候我们需要同时对数据进行线性代数相关的操作和元素相关的操作,这个时候就需要在 Matrix 和 Array 之间进行转换。

Matrix 有一个 array() 方法可将 Matrix 转化为 Array 对象。同样,Array 有一个 matrix() 方法可将 Array 对象转化为 Matrix 对象。和 Eigen 表达式优化一样,这种转换没有运行时消耗(假设你允许编译器优化)。.array() 方法和 .matrix() 方法的返回值均可以当做左值或者右值进行使用。

Eigen 不允许在同一个表达式中同时使用 Array 和 Matrix 对象,也就是说你不能直接将 Array 和 Matrix 对象相加。重载的运算符 +,其两侧要么全是 Array,要么全是 Matrix 对象。赋值运算符是个例外,你可以将 Matrix d对象赋予 Array 对象,同样你也可以将 Array 对象赋予 Matrix对象。

  MatrixXf m(2,2);
  MatrixXf n(2,2);
  MatrixXf result(2,2);
  m << 1,2,
       3,4;
  n << 5,6,
       7,8;
  result = m * n;
  result = m.array() * n.array();
  result = m.cwiseProduct(n);
  result = m.array() + 4;

相关文章

  • 数组类(Array)和元素操作

    数组类(Array)和元素操作 转载:原文地址:http://eigen.tuxfamily.org/dox/gr...

  • 32.Arrays类

    Arrays类 Arrays类概述,常用功能 Arrays类指代数组操作工具类,专门用于操作数组元素的 Array...

  • PHP数组的进阶用法

    对于数组的基本操作,可参考PHP数组的相关操作 array_filter()过滤数组元素array_filter(...

  • 第十天_java数组(2018-08-07)

    1、数组Array操作类的方法: 1、Array.toString(); 输出数组 2、Array.bina...

  • Kotlin(数组)学习笔记

    数组 概述 Array 类代表着数组 [] 可以用于访问数组的元素,实际上 [] 被进行了操作符的重载,调用的是 ...

  • ES6——数组

    数组创建 Array.of() 将参数中所有值作为元素形成数组。 Array.from() 将类数组对象或可迭代对...

  • 数组、post、get

    一维数组 声明数组$Array = array(元素值1,元素值2,元素值N))$Array = ['王明朝','...

  • Array知识整理

    Array基本常用API 对类数组对象进行数组操作 Array深拷贝.concat([]) 是利用拼接两个数组的方...

  • 009_scala编程详解数组操作之Array,ArrayBuf

    Array ArrayBuffer 遍历Array和ArrayBuffer 数组常见操作

  • 实战:数组操作

    要求定义一个数组操作类(Array类),在这个类里面可以进行整型数组的操作;由外部类传入数组的大小,实现数据的保存...

网友评论

    本文标题:数组类(Array)和元素操作

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