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(4,4);m << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;cout<<"Block in the middle"<<endl;cout<<m.block<2,2>(1,1)<<endl<<endl;for(int i = 1; i <= 3; ++i){cout<<"Block of size "<<i<<" x "<<i<<endl;cout<<m.block(0,0,i,i)<<endl<<endl;}return 0;
}


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

举例如下:

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

运行结果如下:

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

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

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(3,3);m << 1,2,3,4,5,6,7,8,9;cout<<"Here is the matrix m:"<<endl<<m<<endl;cout<<"2nd Row: "<<m.row(1)<<endl;m.col(2) += 3*m.col(0);cout<<"After adding 4 times the first column into the third column,the matrix m is:\n";cout<<m<<endl;return 0;
}


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

矩阵的块操作:

举例如下:

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

运行结果如下:

转载自:
博主:山里的小勇子
博文地址:https://www.cnblogs.com/wangxiaoyong/p/8906213.html
来源:博客园

Eigen--.block(i,j,p,q)相关推荐

  1. [教程]HP Envy J/K/Q/N系列Haswell平台 Clover引导安装黑苹果

    原文链接:https://www.tonymacx86.com/threads/guide-hp-envy-haswell-series-j-k-q-n-using-clover-uefi-10-11 ...

  2. Eigen: C++开源矩阵计算工具——Eigen的简单用法

    Eigen非常方便矩阵操作,当然它的功能不止如此,由于本人只用到了它的矩阵相关操作,所以这里只给出了它的一些矩阵相关的简单用法,以方便快速入门.矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维 ...

  3. 【自动驾驶】Eigen:矩阵Matrix的使用

    矩阵的使用可参考系列博客:https://blog.csdn.net/caomin1hao/category_7898685.html 1.Eigen::Matrix<float, 3, 4&g ...

  4. Eigen入门之密集矩阵 4 - 块操作

    简介 Eigen 中Matrix/Array提供了.block()来进行block区块操作,这是面向系数提供的操作功能. 语法 Eigen中提供了2种语法,针对产生的结果是一致的.但存在性能上的不同, ...

  5. Eigen(6)快操作

    1. 块操作 块是matrix或array中的矩形子部分. 2. 使用块 函数.block(),有两种形式 operation 构建一个动态尺寸的block 构建一个固定尺寸的block 起点(i,j ...

  6. Eigen C++开源矩阵计算工具——Eigen的简单用法

    Eigen非常方便矩阵操作,当然它的功能不止如此,由于本人只用到了它的矩阵相关操作,所以这里只给出了它的一些矩阵相关的简单用法,以方便快速入门.矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维 ...

  7. ——Eigen介绍及简单使用(PCL库实现)

    转载自:https://blog.csdn.net/fengbingchun/article/details/47378515, Eigen是可以用来进行线性代数.矩阵.向量操作等运算的C++库,它里 ...

  8. eigen库学习笔记

    #简介 Eigen是有关线性代数(矩阵.向量等)的c++模板库.支持SSE2/3/4, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bi ...

  9. C++开源矩阵计算工具——Eigen的简单用法(三)

    本节主要涉及Eigen的块操作以及QR分解,Eigen的QR分解非常绕人,搞了很久才搞明白是怎么回事,最后是一个使用Eigen的矩阵操作完成二维高斯拟合求取光点的代码例子,关于二维高斯拟合求取光点的详 ...

最新文章

  1. 利用群体智慧,进行大规模的事实审核
  2. boost::posix_time和boost::date_time杂项的测试程序
  3. VTK:Medical之MedicalDemo1
  4. 20165105第三周学习总结
  5. python 类和对象 有必要学吗_类与对象-python学习19
  6. .htaccess必须以ASCII模式上传
  7. PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)
  8. JS设计模式初识(四)-迭代器模式
  9. WebSphere 管理员界面 修改配置之后,没有反应的原因,需要按下[保存]link
  10. 在mysql中修改表名的sql语句
  11. [CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
  12. php改时间戳,如何实现转换php时间戳
  13. 恩兔NS-1刷ARMBIAN教程
  14. 一文解密 Netflix 的快速事件通知系统是如何工作的
  15. 原生js提供的视频画中画api
  16. train_test_split(),随机划分训练集和测试集的函数
  17. 记某环境SqlServer异地备份的坑(Server权限管控贼拉严格)
  18. Spring学习笔记-狂神版
  19. 华为便携机修改服务器密码,华为随身WiFi如何修改WiFi密码 华为随身WiFi修改WiFi密码方法【介绍】...
  20. python倒计时定时器_使用python修饰器的定时器倒计时

热门文章

  1. Spring Batch示例教程
  2. CentOS7 开机自启动脚本 chkconfig方式
  3. vue 历史更新 功能
  4. C#LeetCode刷题-设计
  5. C#LeetCode刷题-数组
  6. mysql时间相关函数和操作
  7. freelance平台_完整的Freelance Web开发人员指南:如何通过Freelance编程工作来赚钱
  8. 阶级斗争的作用_21世纪的阶级斗争
  9. 122_Power PivotPower BI不连续日期的日环比
  10. vimb java_vim 中更好的編輯 java 文件.