Eigen 学习之块操作
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 学习之块操作的更多相关文章
- itop4412学习-超级块操作
1. 先看下超级块支持的函数列表,文件路径\4412_SCP精英版\Android源码\iTop4412_Kernel_3.0_20140521\iTop4412_Kernel_3.0\include ...
- Smart210学习记录------块设备
转自:http://bbs.chinaunix.net/thread-2017377-1-1.html 本章的目的用尽可能最简单的方法写出一个能用的块设备驱动.所谓的能用,是指我们可以对这个驱动生成的 ...
- Eigen学习
Eigen 是一个基于C++的线性代数库,其中实现大量常用的线性代数算法,包括常规矩阵计算,矩阵变换,矩阵分解,矩阵块操作.Eigen 广泛地应用在开源项目中,例如OpenCV,PCL(Point C ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- PHP学习之-数据库操作
PHP学习之-数据库操作 1.PHP支持那些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Or ...
- [Python] Python 学习 - 可视化数据操作(一)
Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文 ...
- python入门学习:3.操作列表
python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表 循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...
- VIM块操作
一.可视模式 按v启用可视模式,之后移动光标可以选择. 如: 如果想整行操作,则用大写的V,再移动光标可以按行为单位进行选择. 二.列块操作 在 word中有一个功能,按alt加鼠标拖动,可以 ...
- torch Tensor学习:切片操作
torch Tensor学习:切片操作 torch Tensor Slice 一直使用的是matlab处理矩阵,想从matlab转到lua+torch上,然而在matrix处理上遇到了好多类型不匹配问 ...
随机推荐
- Python 日期和时间的几种输出格式
在python中,我们可以使用 time 模块的 strftime 方法来格式化日期,例子如下: import time # 格式化成2016-03-20 11:45:39形式 print (time ...
- B+树 -- Java实现
一.B+树定义 B+树定义:关键字个数比孩子结点个数小1的树. 除此之外B+树还有以下的要求: B+树包含2种类型的结点:内部结点(也称索引结点)和叶子结点.根结点本身即可以是内部结点,也可以是叶子结 ...
- springcloud 熔断处理
在springcloud微服务中,有时候一个服务挂了,我们需要友好的提示,此时我们在api网关路由上做一下过滤,进行友好的提示处理. 代码如下: import com.fasterxml.jackso ...
- Redis debugging guide---官方
Redis debugging guide Redis is developed with a great stress on stability: we do our best with every ...
- Red Hat Linux 无法使用yum命令
一:首先提供部分Red Hat 镜像下载地址 1.rhel-server-6.8-i386-dvd.iso 链接: https://pan.baidu.com/s/18VqxRgBMuAJE7Ty0H ...
- [转] What is a Full Stack developer?
期望一个凡人掌握开发过程中各个方面的知识,合理吗?也许不合理,但是Facebook正是要寻找这样的人.在一个OSCON会议上,一名Facebook的工程师告诉我的,他们只聘请“全能(Full stac ...
- Spring boot应用踩坑集锦
Spring boot应用踩坑集锦 spring boot是spring的一种开发套件,是spring cloud的基础框架,要学习spring cloud微服务是绕不开的,遇到一些踩坑问题在这里记录 ...
- 高性能分布式锁-redisson
RedLock算法-使用redis实现分布式锁服务 译自Redis官方文档 在多线程共享临界资源的场景下,分布式锁是一种非常重要的组件. 许多库使用不同的方式使用redis实现一个分布式锁管理. 其中 ...
- Messenger与AIDL的异同
Messenger与AIDL的异同 最近做项目需要使用进程间通信,大家知道应用层的进程间通信无非Broadcast,Activity,Service,Content Provider四大组件.Broa ...
- AutoFac使用方法总结四:生命周期续
控制反转(IoC/Inverse Of Control): 调用者不再创建被调用者的实例,由autofac框架实现(容器创建)所以称为控制反转. 依赖注入(DI/Depende ...