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. Node安装及自定义config

    下载Node.js , Windows下安装一键到底, 没有什么说的. 主要是默认无法流畅使用, 包括流畅下载, 全局缓存之类. 如下是进一步设置, 包括: - 设置淘宝镜像. - 增加Yarn(np ...

  2. 搭建zookeeper伪分布式集群

    伪分布式集群的意思就是在同一台机子上部署多个zookeeoer,但是他们的端口不一样. 1.安装zookeeper 到/usr/local 2.cd /usr/local/zookeeper 3.cd ...

  3. base64 压缩上传上传图片

    @{ ViewBag.Title = "dddddddd"; Layout = "~/Areas/Wap/Views/Shared/_Head.cshtml"; ...

  4. WordPress版微信小程序2.4版发布

    自从发布2017年9月16日WordPress版微信小程序2.2.8版本后,这个一个多月来,WordPress版微信小程序,在经过一些比较小的更新后,今天发布阶段性的版本:2.4版 .这版本主要是功能 ...

  5. 一个简单的通讯服务框架(大家发表意见一起研究)JAVA版本

    最近研究下java语言,根据一般使用的情况,写了个连接通讯服务的框架: 框架结构 C-Manager-S; 把所有通讯内容抽取成三个方法接口:GetData,SetData,带返还的Get; 所有数据 ...

  6. JAVA 每周一 每周日 时间

    Calendar cal = Calendar.getInstance(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd&q ...

  7. dubbo文档

    Srping版Dubbo集成中文地址: https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html Spring ...

  8. 十六进制颜色值和rgb颜色值互相转换

    在之前的一篇文章<将16进制的颜色转为rgb颜色>中,曾经写过将16进制的颜色转换为rgb颜色. 当然了,今天再看,还是有很多可以优化的地方,所以对之前的代码重构了一遍,并且同时写了一个反 ...

  9. tensorflow实战讨论

    欢迎关注微信公众号:樱园的玻尔兹曼机

  10. 转 java的JsonObject对象提取值

    import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson ...