Eigen 为 Matrix 、Array 和  Vector提供了块操作方法。块区域可以被用作 左值 和 右值。在Eigen中最常用的块操作函数是 .block() 。

block() 方法的定义如下:

  block of size (p,q) ,starting at (i,j)。matrix.block(i,j,p,q);     matrix.block<p,q>(i,j);

上述两种形式都可以被用在固定大小和动态大小的矩阵中。

  举例如下:

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
MatrixXf m(,);
m << ,,,,
,,,,
,,,,
,,,;
cout<<"Block in the middle"<<endl;
cout<<m.block<,>(,)<<endl<<endl;
for(int i = ; i <= ; ++i)
{
cout<<"Block of size "<<i<<" x "<<i<<endl;
cout<<m.block(,,i,i)<<endl<<endl;
}
return ;
}

  

  block也可以被用作左值,即block可以进行赋值操作。

  举例如下:

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
Array22f m;
m << ,,
,; Array44f a = Array44f::Constant(0.6);
cout<<"Here is the array a"<<endl<<a<<endl<<endl;
a.block<,>(,) = m;
cout<<"Here is now a with m copoed into its central 2x2 block"<<endl<<a<<endl<<endl;
a.block(,,,) = a.block(,,,);
cout<<"Here is now a with bottom-right 2x3 copied into top-left 2x3 block:"<<endl<<a<<endl<<endl;
return ;
}

  运行结果如下:

  

  特殊情况下的块操作,比如取整行或者整列,取上面的若干行或者底部的若干行。

  取 整行和整列的操作如下:

    matrix.row(i);

matrix.col(j);

   访问矩阵的行和列的操作如下:

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
MatrixXf m(,);
m << ,,,
,,,
,,;
cout<<"Here is the matrix m:"<<endl<<m<<endl;
cout<<"2nd Row: "<<m.row()<<endl;
m.col() += *m.col();
cout<<"After adding 4 times the first column into the third column,the matrix m is:\n";
cout<<m<<endl;
return ;
}

Eigen 还提供了以下对 角点 等特殊块操作方法:

  

  矩阵的块操作:

  

  举例如下;

  

 #include <iostream>
#include <eigen3/Eigen/Dense> using namespace Eigen;
using namespace std; int main(int argc ,char** argv)
{
ArrayXf v();
v << ,,,,,;
cout<<"v.head(3) = "<<endl<<v.head()<<endl<<endl;
cout<<"v.tail<>() = "<<endl<<v.tail<>()<<endl<<endl;
v.segemnt(,) *= ;
cout<<"after v.segemt(1,4) *= 2,v="<<endl<<v<<endl; return ;
}

  运行结果如下:

  

Eigen 学习之块操作的更多相关文章

  1. itop4412学习-超级块操作

    1. 先看下超级块支持的函数列表,文件路径\4412_SCP精英版\Android源码\iTop4412_Kernel_3.0_20140521\iTop4412_Kernel_3.0\include ...

  2. Smart210学习记录------块设备

    转自:http://bbs.chinaunix.net/thread-2017377-1-1.html 本章的目的用尽可能最简单的方法写出一个能用的块设备驱动.所谓的能用,是指我们可以对这个驱动生成的 ...

  3. Eigen学习

    Eigen 是一个基于C++的线性代数库,其中实现大量常用的线性代数算法,包括常规矩阵计算,矩阵变换,矩阵分解,矩阵块操作.Eigen 广泛地应用在开源项目中,例如OpenCV,PCL(Point C ...

  4. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

  5. PHP学习之-数据库操作

    PHP学习之-数据库操作 1.PHP支持那些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Or ...

  6. [Python] Python 学习 - 可视化数据操作(一)

    Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文 ...

  7. python入门学习:3.操作列表

    python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表   循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...

  8. VIM块操作

    一.可视模式 按v启用可视模式,之后移动光标可以选择. 如:     如果想整行操作,则用大写的V,再移动光标可以按行为单位进行选择. 二.列块操作 在 word中有一个功能,按alt加鼠标拖动,可以 ...

  9. torch Tensor学习:切片操作

    torch Tensor学习:切片操作 torch Tensor Slice 一直使用的是matlab处理矩阵,想从matlab转到lua+torch上,然而在matrix处理上遇到了好多类型不匹配问 ...

随机推荐

  1. 二、源代码=>程序集及程序集概念介绍

    文本脉络图如下: 一.源代码-面向CLR的编译器-托管模块-(元数据&IL代码)中介绍了编译器将源文件编译成托管模块(中间语言和元数据),本文主要介绍如何将托管模块合并成程序集. 1.程序集的 ...

  2. SPSS学习系列之SPSS Modeler (简称SPSS)是什么?

    不多说,直接上干货! 推荐博客 SPSS学习系列之SPSS Statistics(简称SPSS)是什么? 官方简介: SPSS Modeler 是全球领先的数据挖掘.预测分析平台软件,拥有简单的图形界 ...

  3. nginx添加多站点

    1.登陆服务器2.修改ngnix配置文件3.重启ngnix4.测试是否添加成功 修改/nginx/conf/nginx.confviminclude /alidata/server/nginx/con ...

  4. redis 安装报错 jemalloc/jemalloc.h: No such file or directory。

    对于redis安装的这个错误,我在博客redis 安装 与错误解决办法最后有提及,但是网上大部分文章的对这个问题的解答都是有误的.所以在这里单列出来. 错误内容: jemalloc/jemalloc. ...

  5. WPF获取相对位置、坐标的方法

    1.获取鼠标在控件中的坐标: private void item_MouseDown(object sender, MouseButtonEventArgs e) { Point point = e. ...

  6. Velocity学习笔记

    一.为什么要使用velocity? 很多人下载了EasyJWeb的开源应用示例,但是对动态页面模板文件中的标签使用不是很熟悉,这里简单介绍一下.EasyJWeb特定把视图限定为Velocity,因为我 ...

  7. ruby大神与菜鸟的代码区别

    之前Brand类   has_and_belongs_to_many :categories, index: true 现在在Category类 增加 has_and_belongs_to_many ...

  8. MicrosoftOfficeProfessionalPlus2013激活方法

    MicrosoftOfficeProfessionalPlus2013已经使用很久(估计快一年了吧),但一直是未激活状态,每次打开都要弹出那个未激活的提示信息,很烦,但不知道自己怎么能够忍受这么久的, ...

  9. Spring整合Hibernate的XML文件配置,以及web.xml文件配置

    利用Spring整合Hibernate时的XML文件配置 applicationContext.xml <?xml version="1.0" encoding=" ...

  10. Tornado简介

    Tornado是一个具有强大异步功能的Python Web框架. Hello World 使用pip安装tornado: pip install tornado 编写控制器: import torna ...