午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Eigen入門指導書3-數組類和基于元素操作

 SLAM之路 2022-04-24

數組類和基于元素的操作

數組類不同于矩陣類,提供可以基于元素的操作;

01

數組類型

數組類型不同于矩陣類型,它提供基于元素的操作,例如數組中每個元素增加一個常數、兩個數組對應元素相乘;

數組類是一個模板類,具有與矩陣相同的模板參數,重點也是前三個參數:

模板類

Array<

    typename Scalar,      //數組元素類型

    int RowsAtCompileTime, //行數

    int ColsAtCompileTime> //列數

Eigen也有自定義數組,形如ArrayNt的表示一維數組,N和t分別表示數組尺寸和元素類型,形式如ArrayNNt表示二位數組,NN和t分別表示數組尺寸和元素類型:

       Array<float,Dynamic,1> ArrayXf

Array<float,3,1> Array3f

Array<double,Dynamic,Dynamic> ArrayXXd

Array<double,3,3> Array33d

02

訪問數組元素

括號運算符,重載為具有寫和讀數組元素的權限,類似于矩陣;因此,<<運算符用于初始化數組或打印;

  Eigen::ArrayXXf  m(2,2);     //基于元素進行賦值  m(0,0) = 1.0; m(0,1) = 2.0;  m(1,0) = 3.0; m(1,1) = m(0,1) + m(1,0);    // 將數組輸出  cout << m << endl << endl;   // 使用逗號運算符賦值  m << 1.0,2.0,       3.0,4.0;       // 輸出數組  cout << m << endl;

03

數組加法和減法

兩個矩陣相加或相減與矩陣相同,如果兩個數組尺寸相同則運算有效;加法和減法可以基于元素進行;

數組也支持表達式形如array+scalar運算,即將一個常量標量加到數組每個元素上,矩陣不具有該能力;

  Eigen::ArrayXXf a(3,3);  Eigen::ArrayXXf b(3,3);  a << 1,2,3,       4,5,6,       7,8,9;   b << 1,2,3,       1,2,3,       1,2,3;         // 兩個數組求和  cout << "a + b = " << endl << a + b << endl << endl;   // 從數組每個元素減去一個標量  cout << "a - 2 = " << endl << a - 2 << endl;

04

數組乘法

當且僅當兩個數組具有相同維度時,對應元素相乘;

  Eigen::ArrayXXf a(2,2);  Eigen::ArrayXXf b(2,2);  a << 1,2,       3,4;  b << 5,6,        7,8;  cout << "a * b = " << endl << a * b << endl;

05

其他基于元素的運算

abs():絕對值運算;

sqrt():平方根運算;

min():兩個數組對應位置最小值;

 Eigen::ArrayXf a = ArrayXf::Random(5);  a *= 2;   cout << "a =" << endl        << a << endl;  cout << "a.abs() =" << endl        << a.abs() << endl;  cout << "a.abs().sqrt() =" << endl        << a.abs().sqrt() << endl;  cout << "a.min(a.abs().sqrt()) =" << endl        << a.min(a.abs().sqrt()) << endl;

06

數組與矩陣相互轉化

如果需要進行線性代數運算,則使用矩陣表達式;

如果需要進行基于元素運算,則使用數組表達式;

矩陣表達式->數組表達式:矩陣表達式.array();

數組表達式->矩陣表達式:數組表達式.matrix();

 .array() 和 .matrix() 都可以作為左值或者右值;

在eigen中,矩陣和數組不可以在表達式中混用,但是賦值運算符除外可以將一個矩陣賦給數組或者反之;

  Eigen:MatrixXf m(2,2);  Eigen::MatrixXf n(2,2);  Eigen::MatrixXf result(2,2);   m << 1,2,       3,4;  n << 5,6,        7,8;   result = m * n;  cout << "-- Matrix m*n: --" << endl << result << endl << endl;  result = m.array() * n.array();  cout << "-- Array m*n: --" << endl << result << endl << endl;  result = m.cwiseProduct(n);   // Eigen中提供的矩陣對應元素相乘.cwiseProduct(.)  cout << "-- With cwiseProduct: --" << endl << result << endl << endl;  result = m.array() + 4;  cout << "-- Array m + 4: --" << endl << result << endl << endl;

注:本文參考自https://eigen./dox/group__TutorialArrayClass.html

    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多