Eigen学习笔记2-Matrix类
在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的。向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行。
Matrix模板类有6个参数,其中前三个参数是必须的。前三个参数如下:
Matrix<typename Scalar,int RowsAtCompileTime,int ColsAtCompileTime >
Scalar 是 标量类型,取值可以是 float ,int double 等。
RowsAtCompileTime 和 ColsAtCompileTime 是在程序编译时就已经知道的矩阵的行数和列数。
Eigen 提供了一些常用的 定义好的类型。比如:
typedef Matrix<float,4,4> Matrix4f .
在Eigen中,列向量是默认向量,在不特别说明的情况下,向量Vector就是指的列向量。在Eigen中定义了列向量:
typedef Matrix<float,3,1> Vector3f ;
Eigen也定义了行向量:
typedef Matrix<int ,1,2 > RowVector2i ;
如果矩阵的尺寸在编译的时候是不确定的,而在运行的时候才能确定,Eigen提供了定义动态大小的方法。比如非常好用的:
typedef Matrix<double ,Dynamic,Dynamic > MatrixXd;
MatrixXd定义了任意行数和列数的矩阵,可以在运行时确定。
类似地,对于向量有:
typedef Matrix<int ,Dynamic ,1> VectorXi ;
也可以对于一个维度确定,而指定另外一个维度是动态大小的。
Matrix<float,3,Dynamic> 矩阵的行数是 3,列数不确定。
矩阵的构造,Eigen提供了默认构造函数。
Matrix3f a;
MatirxXf b;
a 是一个3 x 3的矩阵,每个元素都是未初始化的float。
b 目前是一个 0 x 0 的矩阵。
带参数的构造函数,对于矩阵,行数在列数前面,对于向量,只有向量的大小。
MatrixXf a(10,15);
VectorXf b(30);
a 是一个 10 x 15的动态大小的矩阵,分配了内存但是没有初始化。
b 是一个动态大小的向量,大小是30,分配了内存但是没有初始化。
对于维度在 4 以下的矩阵和向量,都定义了固定大小的类型。
例如可以使用,
Vector2d ; Vector3d ; Vector4d; 等来定义向量。
Matrix2f ;Matrix3f ; Matrix4f ; 等定义矩阵。
可以使用逗号初始化方式给矩阵和向量赋值。例如:
Matrix3f m;
m << 1,2,3,
4,5,6,
7,8,9;
这样就将上述值赋给了矩阵,在Eigen中矩阵默认的存储方式是行优先,就是先存储行。
Eigen支持对动态大小的矩阵和向量重新指定大小。
rows() , cols() , size() 分别返回行数,列数和 元素的个数。
resize() 则可以重新指定矩阵大小。
实例如下;
#include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen; int main(int argc ,char** argv)
{
MatrixXd m(,);
m.resize(,);
std::cout<<"The matrix m is of size "
<<m.rows()<<" x "<<m.cols()<<std::endl;
std::cout<<"It has"<<m.size()<<" coefficients"<<std::endl; VectorXd v(;
v.resize(;
std::cout<<"The vector v is of size "<<v.size()<<std::endl;
std::cout<<"As a matrix, v is of size "
<<v.rows()<<" x "<<v.cols()<<std::endl; return ;
}
运行结果:

赋值和resize
对于动态大小的矩阵,使用操作符 = 的时候,左边的矩阵大小会根据右边的矩阵大小改变。
例如:
#include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen; int main(int argc ,char** argv)
{
Matrix2f a(,);
std::cout<<"a is of size "<<a.rows()<<"x"<<a.cols()<<std::endl;
MatrixXf b(,);
a = b;
std::cout<<"a is now of size "<<a.rows()<<"x"<<a.cols()<<std::endl; return ;
}
运行结果如下:

固定大小和动态大小
对于小尺寸的矩阵,使用固定大小的方式,时间开销要小的多。
Eigen 定义了相当多的方便使用的类型,其中还包括复数类型。
MatrixNt ,VectorNt ,RowVectorNt 。
N : 2,3,4,X ;
t : i ,f d ,cf cd.
Eigen学习笔记2-Matrix类的更多相关文章
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...
- python cookbook第三版学习笔记十:类和对象(一)
类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair: def __init__(self,x,y): self.x=x self. ...
- Java学习笔记16---抽象类与接口的浅显理解
抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...
- java学习笔记7--抽象类与抽象方法
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
- Eigen学习笔记2:C++矩阵运算库Eigen介绍
Eigen常规矩阵定义 1.使用 Eigen的使用在官网上有详细的介绍,这里对我学习过程中用到的基本操作进行介绍.首先是矩阵的定义.在矩阵类的模板参数共有6个.一般情况下我们只需要关注前三个参数即可. ...
- python 学习笔记7(类/对象的属性;特性,__getattr__)
27. 属性的__dict__系统 1)对象的属性可能来自: 其类的定义,叫做类属性 继承父类的定义 该对象实例定义(初始化对象时赋值),叫做对象属性 2)对象的属性存储在对象的 __dict__ 属 ...
随机推荐
- ubuntu16.04更改源为阿里源
一.通过系统更换源 第一步:备份原来的源文件cd /etc/apt/ 然后会显示下面的源文件sources.list输入命令sudo cp sources.list sources.list.bak ...
- 数据库报错com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ua' at row 1
记一次报错记录,成长路上的点滴 明明使用浏览器或者微信开发工具调试接口没有问题,但是在真机测试时候就出问题了.(((¬_¬)) 500服务器内部错误,要死的节奏啊 登陆tomcat服务器 使用命令ta ...
- 用css实现在横线中间插入文字
在一些登录或者注册界面中常常可看到,一个大框框上面的横线中有插入文字,大概示意图如下: 这种现象其实是相对位置作用的结果,可以通过相对定位,是某元素恰好出现在div的边框上. position: re ...
- springweb flux 服务器推送事件
以前做服务器推送一般用轮询,后端主动给客户端推送不是很好解决.有时候也可以采用websocket 现在看了springwebflux,用它自带的方法做服务器推送方便多了. 代码如下: import o ...
- 功能------常用快捷键(在win10下)
功能------win10 常用快捷键 在进行学习,记录,编写代码时,需要用到一些功能,用鼠标浪费时间,可以使用快捷键来快速的处理.方便操作. 以下内容分为两类.快捷键以及触控板类(不能享用鼠标) 快 ...
- 牛客网剑指offer java 全部题解
经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...
- Node.js压缩与解压数据
Node.js中提供了一个很好的库Zlib来压缩解压数据. 一.压缩缓冲区 Zlib中有下面几个函数方便解压缩缓冲区. gzip/gunzip:标准gzip压缩. deflate/inflate:基于 ...
- Firebird shadow
火鸟数据库的shadow,即实时镜像. 主库发生变化,shadow也跟随变化,防止任何意外造成主库损坏无法使用,当然shadow可以有多个. 1.创建shadow的准备:修改Firebird.conf ...
- [转]How to Import a Text File into SQL Server 2012
Importing a using the OpenRowSet() Function The OPENROWSET bulk row set provider is accessed by call ...
- PowerDesigner设置默认值名称规则
一.需求背景: 使用PowerDesigner创建表时,若设置某列默认值时,自动生成规则的默认值名称.比如说:DF_表名_列名 二.设置步骤: 1.选择Database—>Edit Curren ...