转载于: https://www.cnblogs.com/houkai/p/6349981.html

原生缓存的接口:Map类

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

简介

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

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

使用Map变量

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

typedef Matrix<float,1,Dynamic> MatrixType;
typedef Map<MatrixType> MapType;
typedef Map<const MatrixType> MapTypeConst;   // a read-only map
const 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 m2
MapType m2map(p,m2.size());   // m2map shares data with m2
MapTypeConst m2mapconst(p,m2.size());  // a read-only accessor for m2
cout << "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 array
cout << "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对象。

改变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

Eigen教程(8)之Map类相关推荐

  1. Eigen(7)Map类

    这里将解释Eigen如何与原生raw C/C++ 数组混合编程. 1. 简介 Eigen中定义了一系列的vector和matrix,相比copy数据,更一般的方式是复用数据的内存,将它们转变为Eige ...

  2. Eigen教程(4)之Array类和元素级操作

    转载于: https://www.cnblogs.com/houkai/p/6349970.html Array类和元素级操作 为什么使用Array 相对于Matrix提供的线性代数运算,Array类 ...

  3. Eigen官网教程(6) Map类

    0 介绍 有时,您可能希望在Eigen中使用预定义的数字数组作为向量或矩阵.虽然一个选项是复制数据,但最常见的是您可能希望将此内存重新用作特征类型.幸运的是,使用Map类非常容易. 1 映射类型并声明 ...

  4. ArcGIS API for JavaScript 入门教程[5] 再讲数据——Map类之底图与高程

    [回顾]前4篇交代了JsAPI的背景.资源如何获取,简介了数据与视图分离的概念与实现,剖析了页面的大骨架. 这篇开始,讲Map类. 转载注明出处,博客园/CSDN/B站/知乎:秋意正寒 目录:http ...

  5. Eigen教程1 - 基础

    Eigen教程1 - 基础 参考:https://blog.csdn.net/xuezhisdc/article/details/54619853 固定大小的矩阵和向量 /** 参考链接:http:/ ...

  6. Eigen教程(8)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 原生缓存的接口:Map类 这篇将解释Eigen如何与原生raw C/C++ 数组混合 ...

  7. Eigen教程:1 Eigen简介和矩阵常见操作

    文章目录 一. 模块和头文件 二. 矩阵 1. 矩阵类型 2. 数据存储 3. 动态矩阵和静态矩阵 4. 矩阵元素的访问 5. 设置矩阵的元素 6. 重置矩阵大小 7. 矩阵和向量的算术运算 8. 行 ...

  8. java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO

    Day50.Map类常用的方法 -Java常用类.集合#.IO Day50.Map类常用的方法 -Java常用类.集合#.IO Map类常用的方法 . 总结: 常用方法 添加: put(Object ...

  9. java 配置信息_[Java教程]java 配置信息类 Properties 的简单使用

    [Java教程]java 配置信息类 Properties 的简单使用 0 2016-12-08 09:00:09 Properties :(配置信息类) 是一个表示持久性的集合 ,继承 Hashta ...

最新文章

  1. json的简单的数据格式
  2. jQuery学习- 内容选择器
  3. java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题
  4. ios 自己创建的动态frameworks 怎么发布_iPadOS/iOS 13.1 正式发布,这才是真正的 iOS 13 系统...
  5. iview 级联选择组件_vue组件递归渲染实例
  6. 年底了,给想进阶的的前端朋友一些福利
  7. CF1396B Stoned Game(博弈论)
  8. 百度图神经网络学习——day04:图神经网络算法(二)
  9. CCF201909-4 推荐系统(100分)【模拟】
  10. Unity3D之UGUI基础7:Scrollbar卷动条
  11. Mysql压缩包版的安装教程
  12. 第二课 做站群之前的准备工作
  13. maxscale连接mysql_MaxScale实现mysql读写分离,负载均衡
  14. Nginx之13运筹帷幄 - (VeryNginx)
  15. 洛谷 P3324 [SDOI2015]星际战争 二分答案+网络流
  16. C语言求一元二次方程根
  17. 标准机构发布物联网安全测试指南
  18. uni-app海报保存制作
  19. 注意!这些行业已经在使用智能语音机器人做销售啦!
  20. C语言中的 int** 是什么?这要从int* 和int 说起...

热门文章

  1. 工作小总结(字符串包含,获取当前页面的url等系列问题)
  2. 系统安装-黑苹果之路
  3. 中国海洋大学第四届朗讯杯高级组 A 2718 Rocky(模拟)
  4. C# 窗口大小及屏幕分辨率操作
  5. 调试输出类型为dll的程序
  6. SQL函数学习 之 DENSE_RANK() OVER (PARTITION BY col2 ORDER BY col3 DESC) AS seq
  7. 【Hadoop】HDFS三组件:NameNode、SecondaryNameNode和DataNode
  8. LabVIEW之安装队列工具包AMC安装问题解决
  9. webpack+vue解决前端跨域问题
  10. 项目遇到的问题总结(四):单页面首屏加载慢解决方案