1.5 高级初始化

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

1.The comma initializer

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

Matrix3f m;
m << , , ,
, , ,
, , ;
std::cout << m;
//output

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

RowVectorXd vec1();
vec1 << , , ;
std::cout << "vec1 = " << vec1 << std::endl;
RowVectorXd vec2();
vec2 << , , , ;
std::cout << "vec2 = " << vec2 << std::endl;
RowVectorXd joined();
joined << vec1, vec2;//vec1后接vec2
std::cout << "joined = " << joined << std::endl;
//output
vec1 =
vec2 =
joined =

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

MatrixXf matA(, );
matA << , , , ;
MatrixXf matB(, );
matB << matA, matA/, matA/, matA;
std::cout << matB << std::endl;
//output
0.1 0.2
0.3 0.4
0.1 0.2
0.3 0.4

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

Matrix3f m;
m.row() << , , ;
m.block(,,,) << , , , ;
m.col().tail() << , ;
std::cout << m;
//output

2.特殊的矩阵和数组

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

std::cout << "A fixed-size array:\n";
Array33f a1 = Array33f::Zero();
std::cout << a1 << "\n\n";
std::cout << "A one-dimensional dynamic-size array:\n";
ArrayXf a2 = ArrayXf::Zero();
std::cout << a2 << "\n\n";
std::cout << "A two-dimensional dynamic-size array:\n";
ArrayXXf a3 = ArrayXXf::Zero(, );
std::cout << a3 << "\n";
//output
A fixed-size array: A one-dimensional dynamic-size array: A two-dimensional dynamic-size array:

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

ArrayXXf table(, );
table.col() = ArrayXf::LinSpaced(, , );
table.col() = M_PI / * table.col();
table.col() = table.col().sin();
table.col() = table.col().cos();
std::cout << " Degrees Radians Sine Cosine\n";
std::cout << table << std::endl;
//output
Degrees Radians Sine Cosine 0.175 0.174 0.985
0.349 0.342 0.94
0.524 0.5 0.866
0.698 0.643 0.766
0.873 0.766 0.643
1.05 0.866 0.5
1.22 0.94 0.342
1.4 0.985 0.174
1.57 -4.37e-08

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

const int size = ;

MatrixXd mat1(size, size);

mat1.topLeftCorner(size/, size/) = MatrixXd::Zero(size/, size/);

mat1.topRightCorner(size/, size/) = MatrixXd::Identity(size/, size/);

mat1.bottomLeftCorner(size/, size/) = MatrixXd::Identity(size/, size/);

mat1.bottomRightCorner(size/, size/) = MatrixXd::Zero(size/, size/);

std::cout << mat1 << std::endl << std::endl;

MatrixXd mat2(size, size);

mat2.topLeftCorner(size/, size/).setZero();

mat2.topRightCorner(size/, size/).setIdentity();

mat2.bottomLeftCorner(size/, size/).setIdentity();

mat2.bottomRightCorner(size/, size/).setZero();
std::cout << mat2 << std::endl << std::endl;
MatrixXd mat3(size, size);
mat3 << MatrixXd::Zero(size/, size/), MatrixXd::Identity(size/, size/),
MatrixXd::Identity(size/, size/), MatrixXd::Zero(size/, size/);
std::cout << mat3 << std::endl;
//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. SQL查数据库有哪些触发器,存储过程...

    select name from sysobjects where xtype='TR' --所有触发器select name from sysobjects where xtype='P' --所有 ...

  2. 通过eclipse打开jdk native源码

    1.下载 eclipse http://www.eclipse.org/downloads/eclipse-packages/ 建议下载 Eclipse IDE for Eclipse Committ ...

  3. linux服务之apache篇(一)

    1.apache介绍:使用率最高的网站服务器: URL:统一资源定位符: 端口:http:80   https:443 2.apache三种工作模式: prefork:一个线程处理一个请求(占用内存多 ...

  4. tp5 (layui )excel导入

    1.composer安装PHPExcel 下载安装composer 其次 cmd切换到项目根目录 运行命令:composer require phpoffice/phpexcel 注意: 1.运行可能 ...

  5. kubernetes学习笔记之七: Ingress-nginx 部署使用

    一.Ingress 简介 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供 ...

  6. JVM内容梳理

  7. tensorflow-yolo3系列配置文章汇总

    yolo 网络讲解 https://blog.csdn.net/m0_37192554/article/details/81092514 https://blog.csdn.net/guleileo/ ...

  8. Webform(条件查询)

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  9. Sphinx 安装与使用

    Sphinx 优点 高速索引(接近10M/S) 高速搜索(2-4G文本搜索耗时不到0.1秒) 高可用性(单CPU支持100GB文本,100M文档) 提供相关性排名.分布式搜索.文档摘要(高亮显示) S ...

  10. source tree图谱

    参考: https://www.jianshu.com/p/0e64ad60899e