1.5 高级初始化

这一节讨论一些初始化矩阵的高级方法。

1.The comma initializer

eigen提供一个简单设定所有矩阵系数、向量、数组系数的初始化语法,从左上角开始到右下角结束。

  1. Matrix3f m;
  2. m << , , ,
  3. , , ,
  4. , , ;
  5. std::cout << m;
  6. //output

另外,这个初始化也可以将多个向量或者矩阵结合起来,但是必须记住你在使用初始化器之前需要设置大小:

  1. RowVectorXd vec1();
  2. vec1 << , , ;
  3. std::cout << "vec1 = " << vec1 << std::endl;
  4. RowVectorXd vec2();
  5. vec2 << , , , ;
  6. std::cout << "vec2 = " << vec2 << std::endl;
  7. RowVectorXd joined();
  8. joined << vec1, vec2;//vec1后接vec2
  9. std::cout << "joined = " << joined << std::endl;
  10. //output
  11. vec1 =
  12. vec2 =
  13. joined =

我们也可以使用块来初始化矩阵:

  1. MatrixXf matA(, );
  2. matA << , , , ;
  3. MatrixXf matB(, );
  4. matB << matA, matA/, matA/, matA;
  5. std::cout << matB << std::endl;
  6. //output
  7. 0.1 0.2
  8. 0.3 0.4
  9. 0.1 0.2
  10. 0.3 0.4

这样的初始化形式也能初始化矩阵的块,比如:

  1. Matrix3f m;
  2. m.row() << , , ;
  3. m.block(,,,) << , , , ;
  4. m.col().tail() << , ;
  5. std::cout << m;
  6. //output

2.特殊的矩阵和数组

矩阵和数组类同样也有静态成员(访问得用作用域访问符)的方法比如Zero(),初始化所有系数为0。有三种用法:第一种是空括号,使用与固定大小的对象;第二种是带一个参数的括号,适用于一维的动态大小对象;第三种是带有两个参数的括号,适用于二维的动态大小的对象。如下:

  1. std::cout << "A fixed-size array:\n";
  2. Array33f a1 = Array33f::Zero();
  3. std::cout << a1 << "\n\n";
  4. std::cout << "A one-dimensional dynamic-size array:\n";
  5. ArrayXf a2 = ArrayXf::Zero();
  6. std::cout << a2 << "\n\n";
  7. std::cout << "A two-dimensional dynamic-size array:\n";
  8. ArrayXXf a3 = ArrayXXf::Zero(, );
  9. std::cout << a3 << "\n";
  10. //output
  11. A fixed-size array:
  12.  
  13. A one-dimensional dynamic-size array:
  14.  
  15. A two-dimensional dynamic-size array:

类似地,静态成员Constan(value)设置所有系数为某个常数。如果对象的大小需要确定,则在数值参数之前需要额外的两个参数,例如MatrixXd::Constant(rows,
cols,
value)。Random()的静态成员是给矩阵或数组设置任一的值。单位矩阵是用Identity()函数,这个函数只适用与矩阵,而不适用与数组,因为单位矩阵是线性代数的概念。函数LinSpaced(size,low,high)只适用与向量和一维数组,它让某一大小的向量或数组的系数均匀地从低到高的填满,如下所示:

  1. ArrayXXf table(, );
  2. table.col() = ArrayXf::LinSpaced(, , );
  3. table.col() = M_PI / * table.col();
  4. table.col() = table.col().sin();
  5. table.col() = table.col().cos();
  6. std::cout << " Degrees Radians Sine Cosine\n";
  7. std::cout << table << std::endl;
  8. //output
  9. Degrees Radians Sine Cosine
  10.  
  11. 0.175 0.174 0.985
  12. 0.349 0.342 0.94
  13. 0.524 0.5 0.866
  14. 0.698 0.643 0.766
  15. 0.873 0.766 0.643
  16. 1.05 0.866 0.5
  17. 1.22 0.94 0.342
  18. 1.4 0.985 0.174
  19. 1.57 -4.37e-08

以上的函数都是将函数返回值赋值给需要的矩阵而不是直接在需要改变的矩阵上使用,如果想直接在现有矩阵上改变,可以使用setZero(),setIdentity(),setLinSpaced()函数:

  1. const int size = ;
  2.  
  3. MatrixXd mat1(size, size);
  4.  
  5. mat1.topLeftCorner(size/, size/) = MatrixXd::Zero(size/, size/);
  6.  
  7. mat1.topRightCorner(size/, size/) = MatrixXd::Identity(size/, size/);
  8.  
  9. mat1.bottomLeftCorner(size/, size/) = MatrixXd::Identity(size/, size/);
  10.  
  11. mat1.bottomRightCorner(size/, size/) = MatrixXd::Zero(size/, size/);
  12.  
  13. std::cout << mat1 << std::endl << std::endl;
  14.  
  15. MatrixXd mat2(size, size);
  16.  
  17. mat2.topLeftCorner(size/, size/).setZero();
  18.  
  19. mat2.topRightCorner(size/, size/).setIdentity();
  20.  
  21. mat2.bottomLeftCorner(size/, size/).setIdentity();
  22.  
  23. mat2.bottomRightCorner(size/, size/).setZero();
  24. std::cout << mat2 << std::endl << std::endl;
  25. MatrixXd mat3(size, size);
  26. mat3 << MatrixXd::Zero(size/, size/), MatrixXd::Identity(size/, size/),
  27. MatrixXd::Identity(size/, size/), MatrixXd::Zero(size/, size/);
  28. std::cout << mat3 << std::endl;
  29. //output

1.5eigen中高级初始化的更多相关文章

  1. 给iOS中高级求职者的一份面试题解答

    前段时间更新了一篇 给iOS中高级面试官的一份招聘要求 收到很多小伙伴的点赞与关注.可能有很多小伙伴已经带着我在那篇文章给大家提供的一些面试技巧 & 其中的面试题 已经开始招聘或者应聘了!这里 ...

  2. 中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)

    前言 当下,正面临着近几年来的最严重的互联网寒冬,听得最多的一句话便是:相见于江湖~.缩减HC.裁员不绝于耳,大家都是人心惶惶,年前如此,年后想必肯定又是一场更为惨烈的江湖厮杀.但博主始终相信,寒冬之 ...

  3. Java初始化过程

    这篇文章主要讲解Java在创建对象的时候,初始化的顺序.主要从以下几个例子中讲解: 继承关系中初始化顺序 初始化块与构造器的顺序 已经加载过的类的初始化顺序 加载父类,会不会加载子类 创建子类对象会不 ...

  4. nginx源码分析之模块初始化

    在nginx启动过程中,模块的初始化是整个启动过程中的重要部分,而且了解了模块初始化的过程对应后面具体分析各个模块会有事半功倍的效果.在我看来,分析源码来了解模块的初始化是最直接不过的了,所以下面主要 ...

  5. nginx源码分析之网络初始化

    nginx作为一个高性能的HTTP服务器,网络的处理是其核心,了解网络的初始化有助于加深对nginx网络处理的了解,本文主要通过nginx的源代码来分析其网络初始化. 从配置文件中读取初始化信息 与网 ...

  6. Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  7. Git学习笔记一:新建本地仓库及初始化

    1.百度搜索Git下载安装,直接按默认选项安装即可. 例如:Git-2.7.2-32-bit_setup.1457942412.exe 2.配置Git信息,建立版本仓库 (Alt+PrintScerr ...

  8. Spring MVC初始化参数绑定

    初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法  使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型   proper ...

  9. SpringMVC初始化参数绑定--日期格式

    一.初始化参数绑定[一种日期格式] 配置步骤: ①:在applicationcontext.xml中只需要配置一个包扫描器即可 <!-- 包扫描器 --> <context:comp ...

随机推荐

  1. Ubuntu 14.10 下安装Ambari 问题汇总

    在编译安装Ambari时候遇到了很多问题,现在记录一下 1 got error npm ERR! phantomjs@1.9.12 install while building ambari-web ...

  2. getattribute

    属性访问拦截器  class Itcast(object): def __init__(self,subject1): self.subject1 = subject1 self.subject2 = ...

  3. java的String的乱码浅析

    Java又乱码了,怎么办:乱码了说明编码与解码不一致导致.所以使用统一的编码方式即可. 本文并不是一定能解决乱码,本文主要用来了解jvm默认编码,以及string编码与解码一致性问题. jvm的默认编 ...

  4. kubernetes学习笔记之十一:kubernetes dashboard认证及分级授权

    第一章.部署dashboard 作为Kubernetes的Web用户界面,用户可以通过Dashboard在Kubernetes集群中部署容器化的应用,对应用进行问题处理和管理,并对集群本身进行管理.通 ...

  5. Android仿淘宝继续上拉进入商品详情页的效果,使用双Fragment动画切换;

    仿淘宝继续上拉进入商品详情页的效果,双Fragment实现: 动画效果: slide_above_in.xml <?xml version="1.0" encoding=&q ...

  6. day38数据库MySQL基础

    数据库相关基础1 数据库介绍 1.数据库相关概念  数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端)  数据库管理管理系统RDBMS(本质就是一个C/S架构的套接字软件) ...

  7. flask&nginx&gunicore部署

    部署流程: 1.处理服务器的基础环境, 安装和Python有关的软件 安装Python3-pip, Python3-dev apt install python3-pip apt install py ...

  8. QTP - 工作原理

    1.QTP的工作原理测试对象是QTP在测试或组件中创建的用于表示应用程序中的实际对象的对象,并且QuickTest在对象库中存储有关该对象的信息,包括对象的属性.操作等.录制的时候,QTP将操作过的所 ...

  9. 李清华201772020113《面向对象程序设计(Java)》第六周学习总结

    第一部分 理论知识 1.继承 用已有类来构建新类的一种机制.新类可以继承父类的方法和域,同时可以在新类中添加新的方法和域. 已有类称为:超类.基类或父类.新类称作:子类.派生类或孩子类. 子类的构造器 ...

  10. leetcode1029

    class Solution(object): def twoCitySchedCost(self, costs: 'List[List[int]]') -> int: costs = sort ...