Eigen(7)Map类

这里将解释Eigen如何与原生raw C/C++ 数组混合编程。

1. 简介

    Eigen中定义了一系列的vectormatrix,相比copy数据,更一般的方式是复用数据的内存,将它们转变为Eigen类型。Map类很好地实现了这个功能。

2. Map类型

    Map的定义

Map<Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime> >

     默认情况下,Mao只需要一个模板参数。

    为了构建Map变量,我们需要其余的两个信息:一个指向元素数组的指针,Matrix/vector的尺寸。定义一个float类型的矩阵: Map<MatrixXf> mf(pf,rows,columns); pf是一个数组指针float *

    固定尺寸的整形vector声明: Map<const Vector4i> mi(pi);

    注意:Map没有默认的构造函数,你需要传递一个指针来初始化对象。

    Mat是灵活地足够去容纳多种不同的数据表示,其他的两个模板参数:

Map<typename MatrixType,int MapOptions,typename StrideType>

 MapOptions标识指针是否是对齐的(Aligned),默认是Unaligned

  StrideType表示内存数组的组织方式:行列的步长。

int array[8];for(int i = 0; i < 8; ++i) array[i] = i;cout << "Column-major:\n" << Map<Matrix<int,2,4> >(array) << endl;cout << "Row-major:\n" << Map<Matrix<int,2,4,RowMajor> >(array) << endl;cout << "Row-major using stride:\n" <<Map<Matrix<int,2,4>, Unaligned, Stride<1,4> >(array) << endl;

输出

Column-major:

0 2 4 6

1 3 5 7

Row-major:

0 1 2 3

4 5 6 7

Row-major using stride:

0 1 2 3

4 5 6 7

3. 使用Map变量

    可以像Eigen的其他类型一样来使用Map类型。

typedef Matrix<float,1,Dynamic> MatrixType;typedef Map<MatrixType> MapType;typedef Map<const MatrixType> MapTypeConst;   // a read-only mapconst int n_dims = 5;MatrixType m1(n_dims), m2(n_dims);m1.setRandom();m2.setRandom();float *p = &m2(0);  // get the address storing the data for m2MapType m2map(p,m2.size());   // m2map shares data with m2MapTypeConst m2mapconst(p,m2.size());  // a read-only accessor for m2cout << "m1: " << m1 << endl;cout << "m2: " << m2 << endl;cout << "Squared euclidean distance: " << (m1-m2).squaredNorm() << endl;cout << "Squared euclidean distance, using map: " <<(m1-m2map).squaredNorm() << endl;m2map(3) = 7;   // this will change m2, since they share the same arraycout << "Updated m2: " << m2 << endl;cout << "m2 coefficient 2, constant accessor: " << m2mapconst(2) << endl;/* m2mapconst(2) = 5; */   // this yields a compile-time error

输出

m1:   0.68 -0.211  0.566  0.597  0.823

m2: -0.605  -0.33  0.536 -0.444  0.108

Squared euclidean distance: 3.26

Squared euclidean distance, using map: 3.26

Updated m2: -0.605  -0.33  0.536      7  0.108

m2 coefficient 2, constant accessor: 0.536

Eigen提供的函数都兼容Map对象。

4. 改变mapped数组

    Map对象声明后,可以通过C++placement new语法来改变Map的数组。

int data[] = {1,2,3,4,5,6,7,8,9};Map<RowVectorXi> v(data,4);cout << "The mapped vector v is: " << v << "\n";new (&v) Map<RowVectorXi>(data+4,5);cout << "Now v is: " << v << "\n";

 

The mapped vector v is: 1 2 3 4

Now v is: 5 6 7 8 9

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从战中清理代码

从战中清除代码–验证 让我们直接从一个例子开始。 考虑一个简单的Web服务&#xff0c;该服务允许客户向商店下订单。 订单控制器的非常简化的版本可能如下所示– RestController RequestMapping(value "/",consumes MediaType.APPLICATION_JSON_VALUE,produces …

python opencv屏幕找图_使用Python+OpenCV进行图像模板匹配(Match Template)实例-找到百度首页按钮并点击...

意图&#xff1a;准备一张小图&#xff0c;在电脑屏幕上找到小图坐标&#xff0c;并点击。1 安装 opencv 和 numpy&#xff1a;pip3 install opencv-python上述命令将 opencv 和 numpy都安装了&#xff0c;可以在类似D:\Python36\Lib\site-packages目录下看到2 准备小图&…

Eigen(6)快操作

1. 块操作 块是matrix或array中的矩形子部分。 2. 使用块 函数.block()&#xff0c;有两种形式 operation 构建一个动态尺寸的block 构建一个固定尺寸的block 起点(i,j)块大小(p,q) .block(i,j,p,q) .block< p,q >(i,j) Eigen中&#xff0c;索引从0开始。 两个版本…

11.【原创】chrom文件上传后,手动释放内存

最近在用google chrom测试大文件上传功能&#xff0c;上传的文件为4GB左右的。但是试了几次之后突然发现&#xff0c;我C盘的内存由原先的剩余的30多GB变为了15GB左右&#xff0c;猜想是chrom文件上传之后并没有把读取出的文件进行清理。网上找了很久也没有找到类似解决方法。于…

mapreduce排序算法_MapReduce算法–二级排序

mapreduce排序算法我们将继续执行有关实现MapReduce算法的系列文章&#xff0c;该系列可在使用MapReduce进行数据密集型文本处理中找到。 本系列的其他文章&#xff1a; 使用MapReduce进行数据密集型文本处理 使用MapReduce进行数据密集型文本处理-本地聚合第二部分 使用Had…

数据图表与分析图_几种可视化数据分析图表的使用

图表简洁大方、一目了然&#xff0c;利用图表工具就能轻松实现&#xff0c;是数据分析中常采用的方式。今天利用在雀书无代码平台搭建的图表来介绍几种常见数据分析图表的使用。1. 柱状图柱状图可以显示一段时间内的数据变化或显示各项之间的比较情况&#xff0c;主要使用颜色进…

java打包exe

配置如下&#xff1a; 1&#xff0c;复制运行环境jre&#xff1b; 2&#xff0c;复制项目配置文件config; 3&#xff0c;复制项目运行的lib包&#xff1b; 4&#xff0c;编写清单文件&#xff0c;放到系统目录&#xff1b; 5&#xff0c;将项目打包成xxx.jar&#xff0c;放入到…

Eigen(5)Array类和元素级操作

0. 为什么使用Array 相对于Matrix提供的线性代数运算&#xff0c;Array类提供了更为一般的数组功能。Array类为元素级的操作提供了有效途径&#xff0c;比如点加&#xff08;每个元素加值&#xff09;或两个数据相应元素的点乘。 1. Array Array是个类模板&#xff08;类似于M…

装饰信封

有时 很多时候&#xff0c;我需要一个类实现通过使其他类的实例的接口。 听起来很奇怪&#xff1f; 让我给你看一个例子。 在Takes框架中有很多此类&#xff0c;它们的名称都都类似于*Wrap 。 这是一个方便的设计概念&#xff0c;不幸的是&#xff0c;在Java中看起来相当冗长。…

进制转换c语言代码_奇怪的C语言代码,有些函数在变量前加上(void)是什么类型转换?...

C语言的语法极其简洁&#xff0c;即使是初次接触编程语言的初学者也能很快学完它的语法。不过&#xff0c;C语言也是一门“灵活得过了头”的编程语言&#xff0c;对于很多初学者来说&#xff0c;编写C语言程序就好像拿着一堆最基本的砖块&#xff0c;要修建一座大厦一样&#x…

Eigen(4)矩阵基本运算

矩阵和向量的运算 提供一些概述和细节&#xff1a;关于矩阵、向量以及标量的运算。 1. 介绍 Eigen提供了matrix/vector的运算操作&#xff0c;既包括重载了c的算术运算符/-/*&#xff0c;也引入了一些特殊的运算比如点乘dot、叉乘cross等。 对于Matrix类&#xff08;matrix和v…

beta冲刺(1/7)

作业格式 课程名称&#xff1a;软件工程1916|W&#xff08;福州大学&#xff09;作业要求&#xff1a;项目beta冲刺&#xff08;团队&#xff09;团队名称&#xff1a; 那周余嘉熊掌将得队作业目标&#xff1a;beta&#xff08;1/7&#xff09;队员学号队员姓名博客地址备注221…

qq纵横四海源码_【0基础】纵横中文网python爬虫实战

原文在此~【0基础】纵横中文网python爬虫实战​mp.weixin.qq.com大家好&#xff0c;我是你们的机房老哥&#xff01;在粉丝群的日常交流中&#xff0c;爬虫是比较常见的话题。python最强大的功能之一也是爬虫。考虑到很多0基础的小白想要入门爬虫。老哥今天就通过一个比较简单的…

Eigen(3)矩阵Matrix及其简单操作

1. Matrix类 在Eigen&#xff0c;所有的矩阵和向量都是Matrix模板类的对象&#xff0c;Vector只是一种特殊的矩阵&#xff08;一行或者一列&#xff09;。 Matrix有6个模板参数&#xff0c;主要使用前三个参数&#xff0c;剩下的有默认值。 Matrix<typename Scalar, int Ro…

java jquery_jQuery数据表和Java集成

java jqueryjQuery DataTables是一个开放源代码插件&#xff0c;用于在浏览器中创建表。 它具有许多功能&#xff0c;例如排序&#xff0c;服务器端处理&#xff0c; JQUERY UI主题滚动。 该插件的下载链接&#xff1a; http://www.datatables.net/download/ 在本演示中&am…

Eigen(2) 模块与头文件

Eigen库被分为一个Core模块和其他一些模块&#xff0c;每个模块有一些相应的头文件。 为了便于引用&#xff0c;Dense模块整合了一系列模块&#xff1b;Eigen模块整合了所有模块。一般情况下&#xff0c;include<Eigen/Dense> 就够了

白鹭龙骨异步加载

private armatureDisplay: dragonBones.EgretArmatureDisplay; /** * 加载龙骨动画 * Create scene interface */ private loadGragon(): void { let t this; t.removeGragon(); //默认男战士 let sex t.occupationSex.selectedValue ? t.occupationSex.selectedValue : 1; …

zip和unzip上的Java要点

压缩是编写文件时可以在我们的代码中发出的主要动作之一。 因此&#xff0c;我发现在zip和unzip上必不可少的简单Java代码段&#xff0c;并且必须易于访问。 要点是纯Java语言&#xff0c;并以zip格式存储两个文件。 完成后&#xff0c;打开打开的拉链并评估其内容。 import …

ppt图片丢失_041 职场PPT实战:做好的PPT换个电脑就丢字体?三招解决!

大家好&#xff0c;我是肥宅。这是《职场PPT实战》系列更文的第41篇。本期我要跟大家聊一个很实在的问题&#xff0c;字体嵌入。有小伙伴在后台提问&#xff0c;他是这么说的&#xff1a;“肥宅老师&#xff0c;我做好的PPT&#xff0c;换个电脑打开字体就变了&#xff0c;有没…

matlab sort对矩阵某一维进行排序并记录之前索引

sort函数默认升序排列&#xff0c;即‘ascend’&#xff1b; [B, index] sort(A&#xff0c;dim&#xff0c; model) B为排序后矩阵 index记录排序前的索引号 A需要进行排序操作的矩阵 dim对矩阵的维度&#xff08;一维不用指定&#xff0c;二维默认对列&#xff09; mode…