Eigen學習筆記之Array類和操作符

2021-09-24 23:50:08 字數 3137 閱讀 5780

eigen中除了提供matrix的矩陣類之外,還提供了另一類名為array類的陣列型別的類。array類提供了一種更簡單的方式來執行基於係數的操作。具體的區別可以在運算時看出來,在此只是進行簡單的介紹,詳細情況相關部分的內容。

array類模板的輸入引數與matrix類的引數類似。前三個引數和matrix類的前三個引數一樣:

array<

typename scalar,

int rowsatcompiletime,

int colsatcompiletime>

array<

float

,dynamic,

1> arrayxf

array<

float,3

,1> array3f

array<

double

,dynamic,dynamic> arrayxxd

array<

double,3

,3> array33d

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

輸出顯示:

1 2

3 51 2

3 4

array類的加減法和matrix大同小異,主要的區別是在array中可以直接跟係數相加減,這在matrix類中是不能直接使用的。詳細的例子如下:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

輸出顯示:

a + b =

2 4 6

5 7 9

8 10 12

a - 2 =

-1 0 1

2 3 4

5 6 7

直接上例子:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

輸出顯示:

a * b =

5 12

21 32

array在加減乘之外還定義了一些常用的到運算,例如:絕對值abs()方法等。下面由例子給出具體的應用:

#include #include using namespace eigen;

using namespace std;

int main()

輸出結果:

a =

1.36

-0.422

1.13

1.19

1.65

a.abs() =

1.36

0.422

1.13

1.19

1.65

a.abs().sqrt() =

1.17

0.65

1.06

1.09

1.28

a.min(a.abs().sqrt()) =

1.17

-0.422

1.06

1.09

1.28

關於array與matrix的選擇問題,官方給出了乙個知道如下:

兩者之間的轉換,matrix類中提供了乙個.array()方法來進行轉換為array類,array類提供了.matrix()方法來進行轉換為matrix類。這兩個轉換方法都是在編譯階段完成的,並不會占用執行時間。並且還需要注意的是:array和matrix不能進行混用

下面給出乙個使用例子:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

輸出結果:

-- matrix m*n: --

19 22

43 50

-- array m*n: --

5 12

21 32

-- with cwiseproduct: --

5 12

21 32

-- array m + 4: --

5 67 8

下面給出乙個array轉換為matrix類的用法的例子:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

輸出結果:

-- combination 1: --

23 34

31 46

-- combination 2: --

41 58

117 170

<< endl << endl;

result = (m.array() * n.array()).matrix() * m;

cout << "-- combination 2: --" << endl << result << endl << endl;

}

輸出結果:

-- combination 1: --

23 34

31 46

-- combination 2: --

41 58

117 170

Eigen學習筆記 4 Array類和元素級操作

原文 eigen官網 the array class and coefficient wise operations 相對於matrix提供的線性代數運算,array類提供了更為一般的陣列功能。array類為元素級的操作提供了有效途徑,比如點加 每個元素加值 或兩個資料相應元素的點乘。且array和...

Eigen學習筆記

最近由於課題原因,新接觸到乙個c 的線性代數模板庫,名為eigen 讀作 a g n 主頁位於 簡單理解eigen就是對矩陣和向量進行了抽象和建模,並且設計了相關的線性代運算的實現。簡單嘗試了之後發現上手很快,但是某些功能由於設計理念的獨特性,導致最終的實現方案比較特殊。系統是ubuntu 16.0...

前端學習筆記之 Array

1.array 關於陣列的宣告方式 1 var arr new array 3 長度為3的空陣列 2 var arr new array 1,2,3,4 直接初始化 3 var arr 1,2,3,4 這樣直接初始化也行.注意 讀取陣列時若超出範圍則返回undefined.關於arr.length這...