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. php如何使用rabbitmq实现发布消息和消费消息(一对多)(tp框架)(第二篇)

    一个publisher发布消息  多个个customer接受消息 1:准备工作参照: http://www.cnblogs.com/spicy/p/7886820.html 2,:路由: 3: 方法: ...

  2. Android开发之漫漫长途 Ⅲ——Activity的显示之Window和View(2)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  3. WPF将TextBox的边框设为圆角的

    将TextBox的边框设为圆角的,因为TextBox默认的样式中边框就是由Border类型来实现的, 所以只需要真的当前的TextBox的Border修改属性即可,为了不影响界面中别的Border的样 ...

  4. onsubmit解惑

    1.onsubmit的位置: onsubmit只存在于html <form>中,js的form中 2.submit与onsubmit的区别 发生顺序:onsubmit -> subm ...

  5. 开始使用 Vuejs 2.0 --- 组件间数据传递

    Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有 ...

  6. Rails中实现批量删除

    在Rails生成的控制器模版中,包含的destroy只能处理单个对象,而批量删除要求能够同时处理多个对象,这需要自定义一个批量操作action.批量删除的效果图如下:

  7. js / jquery 获取和设置 FCK Editor 的值

    开发中遇到 通过 $("#content").val(); 或者 document.getElementById("content"); 并不能获取到 id 为 ...

  8. [转]ASP.NET cache缓存的用法

    本文转自:https://blog.csdn.net/mss359681091/article/details/51076712 本文导读:在.NET运用中经常用到缓存(Cache)对象.有HttpC ...

  9. mvc中seeeion和cook的用法

    public ActionResult A() {     Session["test"]="123";     return View(); } public ...

  10. PHP 类与对象 全解析(三)

    目录 PHP 类与对象 全解析( 一) PHP 类与对象 全解析( 二) PHP 类与对象 全解析(三 ) 13.魔术方法 定义:PHP把所有以__(两个下划线)开头的类方法当成魔术方法     __ ...