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处理上遇到了好多类型不匹配问 ...
随机推荐
- artTemplate-优秀的前端模板引擎
artTemplate-优秀的前端模板引擎 1.html中引入artTemplate的js文件: <script type="text/javascript" src=&qu ...
- 关于Class中的Signature属性
1.Signature属性:https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.9 2.ClassSigna ...
- C++对象的内存布局以及虚函数表和虚基表
C++对象的内存布局以及虚函数表和虚基表 本文为整理文章, 参考: http://blog.csdn.net/haoel/article/details/3081328 http://blog.csd ...
- java面试⑤前端部分
2.4.1 简单说一下HTML,CSS,javaScript在网页开发中的定位? 2.4.2简单介绍一下AJAX 2.4.3 JS和JQuery的关系 2.4.4 JQuery的常用选择器 2.4.5 ...
- Android 操作Sqlite
首先要用一个类来继承SQLiteOpenHelper,并必须实现 public DatabaseHelper(Context context, String name, CursorFactory f ...
- 【转】MyBatis接口的简单实现原理
MyBatis接口的简单实现原理 用过MyBatis3的人可能会觉得为什么MyBatis的Mapper接口没有实现类,但是可以直接用? 那是因为MyBatis使用Java动态代理实现的接口. 这里仅仅 ...
- 比较ArrayList和LinkedList的异同
1.ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构: 2.对于随机访问get和set,ArrayList要优于LinkedList; 3.对于添加和删除操 ...
- dubbo学习思路梳理
dubbo要解决的问题 rpc调用需要定制.额外的工作量 分布式服务中,服务动辄几十上百,相互之间的调用错综复杂,相互依赖严重 对集群性的服务,需要负载策略 对集群性的服务,能动态扩展节点 dubbo ...
- JAVA非静态成员变量之死循环
1.非静态成员变量 当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环 例子: public class ConstructorCls { private ConstructorCls ...
- 使用dom4j处理xml操作xml数据
使用dom4j处理xml操作xml数据 示例代码: public class TestDom4j { public static void main(String[] args) { String x ...