EIgen:Matricx和vector类的定义和使用
在Eigen中,所有矩阵和向量均为Matrix模板类的对象,向量是矩阵的行(或列)为1是的特殊情况。
1、矩阵的三参数模板
Matrix类有六个模板参数,其中三个有默认值,因此只要学习三个参数就足够了。强制性的三参数模板的原型为:
Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>
三个参数分别表示:标量的类型,编译时的行,编译时的列。
用typedef
定义了很多模板,例如:Matrix4f
表示 4×44 \times 4 的floats 矩阵:
typedef Matrix<float, 4, 4> Matrix4f;
2、向量(Vectors)
向量是矩阵的特殊情况,也是用矩阵定义的。定义如下:
typedef Matrix<float, 3, 1> Vector3f;
typedef Matrix<int, 1, 2> RowVector2i;
3、特殊动态值(special value Dynamic)
Eigen的矩阵不仅能够在编译是确定大小(fixed size),也可以在运行时确定大小,就是所说的动态矩阵(dynamic size)。动态矩阵定义如下:
typedef Matrix<double, Dynamic, Dynamic> MatrixXd;
typedef Matrix<int, Dynamic, 1> VectorXi;
也可使用‘行’固定‘列’动态的矩阵:
Matrix<float, 3, Dynamic>
4、构造函数(Constructors)
可以使用默认的构造函数,不执行动态分配内存,也没有初始化矩阵参数:
Matrix3f a;
MatrixXf b;
- a 是3-by-3矩阵,包含未初始化的 float[9] 数组
- b是动态矩阵,当前大小为 0-by-0, 没有为数组的系数分配内存
矩阵的第一个参数表示“行”,数组只有一个参数。根据跟定的大小分配内存,但不初始化。
MatrixXf a(10,15);
VectorXf b(30);
- a 是10-by-15阵,分配了内存,没有初始化
- b是动态矩阵,当前大小为 30, 分配了内存,没有初始化
对于给定的矩阵,传递的参数无效,如:
Matrix3f a(3,3);
对于维数最大为4的向量,可以直接初始化:
Vector2d a(5.0, 6.0);
Vector3d b(5.0, 6.0, 7.0);
Vector4d c(5.0, 6.0, 7.0, 8.0);
5、系数访问
系数都是从0开始:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{MatrixXd m(2,2);m(0,0) = 3;m(1,0) = 2.5;m(0,1) = -1;m(1,1) = m(1,0) + m(0,1);std::cout << "Here is the matrix m:\n" << m << std::endl;VectorXd v(2);v(0) = 4;v(1) = v(0) - 1;std::cout << "Here is the vector v:\n" << v << std::endl;
}
矩阵默认按列存储。
operator[] 在 vectors 中重载。matrix[i,j]和matrix[j]含义相同。
6、逗号分隔的初始化
Matrix3f m;
m << 1, 2, 3,4, 5, 6,7, 8, 9;
std::cout << m;
7、Resizing
可以用rows(), cols() and size() 改变现有矩阵的大小。这些类方法返回行、列、系数的数值。也可以用resize()来改变动态矩阵的大小。
EIgen:Matricx和vector类的定义和使用相关推荐
- vector在类内定义vector<int> vec(10,0); 报错原因分析
注意使用的过程中别忘记: 添加头文件#include < vector >, 添加命名空间 using namespace std. 常用的函数的定义格式介绍: vector 类成员变量的 ...
- 【stanford C++】容器III——Vector类
主要介绍如下5个容器类--Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...
- C++ vector类详解
转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...
- C++基础学习8:类的定义(class)
先来说说C和C++中结构体的不同a) C语言中的结构体不能为空,否则会报错(??)b) C语言中内存为空结构体分配大小为0,C++中为结构体和类分配大小为1bytec) C语言中的结构体只涉及到数据结 ...
- 【C++入门】C++ vector类
C++vector类 文章目录 C++vector类 一.vector定义 二.容器特性 1.顺序序列 2.动态数组 3.能够感知内存分配器的(Allocator-aware) 三.基本成员函数 1. ...
- 14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
本篇主要是集合框架基础和List集合,Map集合等等后续更 集合 14.1 集合框架 14.1.1 概念 14.1.2 集合架构 14.2 Collection接口 14.2.1 常用方法 14.3 ...
- Qt (高仿Visio)流程图组件开发(三) 图元基类如何定义,流程图多种图元类型实现
文章目录 本系列目录 前言 一.图元基类的定义 1.图元信息基类结构体 2.图元位置 3.父子对象关系 二.自定义图元实现 1.自定义图元基类(FlowchartGraphicsItem)与Qt原生图 ...
- c++ - 第9节 - vector类
目录 1.标准库中的vector类 1.1.vector类 1.2.vector类的常用接口说明 1.3.vector类练习题 2.vector类的模拟实现 2.1.vector类源代码解析 2.2. ...
- C++初阶:vector类
vector 0. vector的介绍 vector是用数组实现的.可变长度的顺序容器,本质是一种类模板. template < class T, // 元素类型class Alloc = al ...
最新文章
- pycharm pycharm中用matplolib的ax3.plot_surface画出的3D(三维图)(三维函数)不能旋转怎么办?
- 工控设备 如何将数据发送到串口_嵌入式无风扇工控机在水质监测系统中的应用...
- ACL 2019 | 图表示解决长文本关系匹配问题:腾讯提出概念交互图算法
- 机器学习性能度量(2):错误接受率 (FAR), 错误拒绝率(FRR),EER计算方法,python实现
- C语言之struct A *b和struct A c区别
- iOS开发基础知识--碎片27
- 两轮差速机器人舵机转轴示意图_灵活、快捷的机房巡检机器人少不了伺服电动轮...
- Git可视化工具-小乌龟
- MATLAB图像拼接算法及实现
- 32位版本的轻量级linux,适用于旧计算机的10种最佳轻量级Linux发行版
- Alsa 调试下篇:应用篇
- 数据分析的重要性分析
- 【深度学习】注意力机制
- h5 虚拟服务器,h5制作选择虚拟主机还是服务器
- 植物大战僵尸CE教程
- 基于PHP+小程序(MINA框架)+Mysql数据库的评选投票小程序系统设计与实现
- w10电脑c盘满了怎么清理_win10系统如何清理c盘空间容量
- 等候·《致我们终将逝去的青春》
- 2022年全球及中国植物精油行业头部企业市场占有率及排名调研报告
- Parameter Sharing Exploration and Hetero-center Triplet Loss