即截取矩阵,基本操作为:
索引同python,从0开始
Block: size of (p, q), start at (i,j) matrix.block(i,j,p,q) //动态大小 matrix.block(p,q) //固定大小
array同样适用该截取方法。
固定块截取速度更快。
对比一下numpy的截取和Eigen的截取
# python版 a = np.linspace(1,16,16) a.reshape(4,4) b = a[1:4, 1:4]
//c++版
MatrixXf m(4,4);
MatrixXf n(3,3);
m << 1,2,3,4,5,6,7,8,
9,10,11,12,13,14,15,16;
n = m.block(1,1,3,3); //矩阵截取
MatrixXf k(2,2);
k << 0,0,0,0;
n.block(0,0,2,2) = k; //矩阵块赋值
//更为便捷的某行某列截取
m.row(1); //截取第2行
m.col(1); //截取第2列
二、向量块操作
基本格式
//用Array和Matrix生成的向量都可以用 //顺序n个元素 vector.head(n); //倒序n个元素 vector.tail(n); //第i个位置起截取n个元素 vector.segment(i,n);
#include#include using namespace std; using namespace Eigen; int main() { ArrayXf v(6); v << 1, 2, 3, 4, 5, 6; cout << "v.head(3) =" << endl << v.head(3) << endl << endl; cout << "v.tail<3>() = " << endl << v.tail<3>() << endl << endl; v.segment(1,4) *= 2; cout << "after 'v.segment(1,4) *= 2', v =" << endl << v << endl; }



