Eigen 不仅提供了Matrix和Vector结构,还提供了Array结构。区别如下,Matrix和Vector就是线性代数中定义的矩阵和向量,所有的数学运算都和数学上一致。但是存在一个问题是数学上的定义并不一定能完全满足现实需求。比如,数学上并没有定义一个矩阵和一个标量的加法运算。但是如果我们想给一个矩阵的每个元素都加上同一个数,那么这个操作就需要我们自己去实现,这显然并不方便。

  Array提供了一个Array类,为我们提供了大量的矩阵未定义的操作,且Array和Matrix之间很容易相互转换,所以相当于给矩阵提供更多的方法。也为使用者的不同需求提供了更多的选择。

  下面看一下Array类的实现。Array类和Matrix有相同的参数。

  Array<typename Scalar, int RowsAtCompileTime , int ColsAtCompileTime >

 上面参数的意义和Matrix中参数的意义是相同的。

  Array也对常用的情况作了一些类型定义。

  typedef Array<float ,Dynamic,1>  ArrayXf;

  typedef Array<float,3,1>              Array3f;

  typedef Array<double,Dynamic ,Dynamic > ArrayXXd;

  typedef Array<double ,3,3 >                      Array33d;

  从上面的几种类型可以看出,Array和Matrix还是存在微小的差别。

  访问 Array中元素

  圆括号 ( ) 被重载用来访问Array中的元素。

  举例如下:

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
ArrayXXf m(,); // 给元素单个赋值
m(,) = 1.0;m(,) = 2.0;
m(,) = 3.0;m(,) = m(,) + m(,);
cout<<m<<endl<<endl; // 也可以使用逗号方式赋值
m<<5.0,6.0,
7.0,8.0;
cout<<m<<endl; return ;
}

运行结果如下:

  加法和减法

  对两个Array进行加法和减法是和Matrix一样,这个操作只要两个Array维度相同,元素类型相同就可以操作。同时Array还定义了Matrix不支持的

对Array 和 一个标量进行的操作。举例如下:

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
ArrayXXf a(,);
ArrayXXf b(,); a << ,,,
,,,
,,; b << ,,,
,,,
,,; cout<<"a + b = "<<endl<<a+b<<endl<<endl; cout<<"a - 2 = "<<endl<<a-<<endl; return ;
}

运行结果如下:

  

  乘法操作

  对于一个Array和标量进行乘法操作是和Matrix一样的,同时Array也定义了两个Array之间的乘法操作,就是将两个Array的对于元素相乘。

  举例如下:

  

 using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
ArrayXXf a(,);
ArrayXXf b(,); a << ,,
,; b << ,,
,;
cout<<"a * b = "<<endl<<a*b<<endl<<endl; return ;
}

  运行结果如下:

  

  可以看到执行了对于元素的乘法。

  其它的元素操作

  Array 还定义了 绝对值 abs() ,开平方根sqrt() , 以及找对应元素最小值操作 min() ;

  举例如下:

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
ArrayXf a = ArrayXf::Random();
a *= ;
cout<<"a = "<<endl
<<a<<endl;
cout<<"a.abs() = "<<endl
<<a.abs()<<endl;
cout<<"a.abs().sqrt() ="<<endl
<<a.abs().sqrt()<<endl;
cout<<"a.min(a.abs().sqrt()) = "<<endl
<<a.min(a.abs().sqrt())<<endl;
return ;
}

  运行如下:

  

  

  Array 和 Matrix 之间可以方便地进行转换。

  Array 有  .matrix() 方法。

  Matrix 有 .array() 方法。

  

  

Eigen学习之Array类的更多相关文章

  1. Eigen学习笔记2-Matrix类

    在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的.向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行. Matrix模板类有6个参数,其中前三个参数是必须的.前三 ...

  2. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  3. Java集合---Array类源码解析

    Java集合---Array类源码解析              ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Prim ...

  4. .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)

    从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...

  5. javascript Array类

    Array类 toString()方法和valueOf()方法,返回特殊的字符串.该字符串是通过对每项调用toString()方法,然后用逗号把它们连接在一起构成的.例如,对具有项"red& ...

  6. C# - 系统类 - Array类

    Array类 ns:System Array是一个抽象类 表示数组 提供了创建.查找.删除.排序.修改等应用于数组的操作 此类没有公有的实例构造函数 可以使用静态方法CreateInstance创建A ...

  7. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别

    JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...

  8. java学习一目了然——File类文件处理

    java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...

  9. Swift学习笔记:类和结构

    一.类和结构的异同 类和结构有一些相似的地方.它们都能够: 1. 定义一些能够赋值的属性: 2. 定义具有功能性的方法 3. 定义下标.使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现 ...

随机推荐

  1. 【树】Lowest Common Ancestor of a Binary Tree(递归)

    题目: Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. Accor ...

  2. Android4.0以上版本比较靠谱的获取手机屏幕分辨率的方法

    /** * 获取虚拟按键栏高度 * * @param context * @return */ public static int getNavigationBarHeight(Context con ...

  3. HUE配置文件hue.ini 的mapred_clusters模块详解(图文详解)(分HA集群和非HA集群)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...

  4. 如何写一个拼写检查器-by Peter Norvig

    本文原著:Peter Norvig  中文翻译:徐宥 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写检查工具感到惊奇. 比如说在搜索的时候键入 ...

  5. 阿里云使用镜像安装freepbx

    安装freepbx真的是历经坎坷,不过也收获了一些东西.freepbx可以通过源码安装也可以通过镜像安装.源码安装我们会在另外一篇文章中讲到,这里我们讲到的是镜像安装,在本地进行镜像安装还是比较简单的 ...

  6. mongodb limit()和skip()

    MongoDB Limit() 方法 如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的 ...

  7. Inno Setup设置在安装Finished页面,点击finish后打开网页

    在安装的最后一个页面FinishPage中点击Finished然后打开一个网页 这个功能貌似很简单,不就是在点击finish按钮给它绑定事件,问题立马解决. 在普通的桌面应用程序开发中的确是这样做的, ...

  8. ASP.NET Core 中的实时框架 SingalR

    目录 SignalR 是什么? 在 ASP.NET Core 中使用 SignalR 权限验证 横向扩展 源代码 参考 SignalR 是什么? ASP.NET Core SignalR 是一个开源的 ...

  9. ASP.NET Core 中的缓存

    目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...

  10. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...