Eigen 为 Matrix 、Array 和 Vector提供了块操作方法。块区域可以被用作 左值 和 右值。在Eigen中最常用的块操作函数是 .block() 。
block() 方法的定义如下:
block of size (p,q) ,starting at (i,j)。matrix.block(i,j,p,q); matrix.block
(i,j);
上述两种形式都可以被用在固定大小和动态大小的矩阵中。
举例如下:
#include
#include
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"<(1,1)<
block也可以被用作左值,即block可以进行赋值操作。
#include
#include
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"<(1,1) = m;
cout<<"Here is now a with m copoed into its central 2x2 block"<
特殊情况下的块操作,比如取整行或者整列,取上面的若干行或者底部的若干行。
取 整行和整列的操作如下:
matrix.row(i);
matrix.col(j);
访问矩阵的行和列的操作如下:
#include
#include
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:"<