Eigen--.block(i,j,p,q)
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)相关推荐
- [教程]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 ...
- Eigen: C++开源矩阵计算工具——Eigen的简单用法
Eigen非常方便矩阵操作,当然它的功能不止如此,由于本人只用到了它的矩阵相关操作,所以这里只给出了它的一些矩阵相关的简单用法,以方便快速入门.矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维 ...
- 【自动驾驶】Eigen:矩阵Matrix的使用
矩阵的使用可参考系列博客:https://blog.csdn.net/caomin1hao/category_7898685.html 1.Eigen::Matrix<float, 3, 4&g ...
- Eigen入门之密集矩阵 4 - 块操作
简介 Eigen 中Matrix/Array提供了.block()来进行block区块操作,这是面向系数提供的操作功能. 语法 Eigen中提供了2种语法,针对产生的结果是一致的.但存在性能上的不同, ...
- Eigen(6)快操作
1. 块操作 块是matrix或array中的矩形子部分. 2. 使用块 函数.block(),有两种形式 operation 构建一个动态尺寸的block 构建一个固定尺寸的block 起点(i,j ...
- Eigen C++开源矩阵计算工具——Eigen的简单用法
Eigen非常方便矩阵操作,当然它的功能不止如此,由于本人只用到了它的矩阵相关操作,所以这里只给出了它的一些矩阵相关的简单用法,以方便快速入门.矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维 ...
- ——Eigen介绍及简单使用(PCL库实现)
转载自:https://blog.csdn.net/fengbingchun/article/details/47378515, Eigen是可以用来进行线性代数.矩阵.向量操作等运算的C++库,它里 ...
- eigen库学习笔记
#简介 Eigen是有关线性代数(矩阵.向量等)的c++模板库.支持SSE2/3/4, ARM NEON (32-bit and 64-bit), PowerPC AltiVec/VSX (32-bi ...
- C++开源矩阵计算工具——Eigen的简单用法(三)
本节主要涉及Eigen的块操作以及QR分解,Eigen的QR分解非常绕人,搞了很久才搞明白是怎么回事,最后是一个使用Eigen的矩阵操作完成二维高斯拟合求取光点的代码例子,关于二维高斯拟合求取光点的详 ...
最新文章
- 利用群体智慧,进行大规模的事实审核
- boost::posix_time和boost::date_time杂项的测试程序
- VTK:Medical之MedicalDemo1
- 20165105第三周学习总结
- python 类和对象 有必要学吗_类与对象-python学习19
- .htaccess必须以ASCII模式上传
- PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)
- JS设计模式初识(四)-迭代器模式
- WebSphere 管理员界面 修改配置之后,没有反应的原因,需要按下[保存]link
- 在mysql中修改表名的sql语句
- [CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
- php改时间戳,如何实现转换php时间戳
- 恩兔NS-1刷ARMBIAN教程
- 一文解密 Netflix 的快速事件通知系统是如何工作的
- 原生js提供的视频画中画api
- train_test_split(),随机划分训练集和测试集的函数
- 记某环境SqlServer异地备份的坑(Server权限管控贼拉严格)
- Spring学习笔记-狂神版
- 华为便携机修改服务器密码,华为随身WiFi如何修改WiFi密码 华为随身WiFi修改WiFi密码方法【介绍】...
- python倒计时定时器_使用python修饰器的定时器倒计时