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

2021-10-01 10:06:00 字數 3201 閱讀 8468

原文:eigen官網-the array class and coefficient-wise operations

相對於matrix提供的線性代數運算,array類提供了更為一般的陣列功能。array類為元素級的操作提供了有效途徑,比如點加(每個元素加值)或兩個資料相應元素的點乘。且array和matrix之間很容易相互轉換,所以相當於給矩陣提供更多的方法。也為使用者的不同需求提供了更多的選擇。

array是個類模板,array類和matrix有相同的引數。前三個引數是必須指定的,後三個是可選的。

array
eigen也提供了一些常用array類的定義,array是同時支援一維和二維的(matrix二維,vector一維)。我們用arraynt表示1維的array,其中n表示大小,t表示型別;用arraynnt表示2維的array。

type

typedef

array

arrayxf

array

array3f

array

arrayxxd

array

array33d

圓括號( )被過載用來訪問array中的元素(包括讀和寫)。另外,<<可以用來初始化array(通過逗號初始化)或者用來列印array。

示例如下:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

結果如下:

1 2

3 51 2

3 4

對兩個array進行加法和減法是和matrix一樣,這個操作只要兩個array維度相同,元素型別相同就可以操作,實現對array中對應逐元素的相加和相減操作。

同時array還定義了matrix不支援的array + scalar的操作,即將array中的每個元素都加上標量的值。

示例如下:

#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

對於乙個array和標量進行乘法操作是和matrix一樣的,同時array也定義了兩個array之間的乘法操作,就是將兩個array的對應元素相乘,因此兩個array必須具有相同的尺寸。

示例如下:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

結果如下:

a * b = 

5 12

21 32

methods

functions

.abs()

計算每個元素的絕對值

.sqrt()

計算每個元素的平方根

.min(.)

對於兩個具有相同大小的矩陣,選取對應位置的較小元素重新生成乙個array

示例如下:

#include

#include

using

namespace eigen;

using

namespace std;

intmain()

結果如下:

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

你應該什麼時候使用matrix類的物件,什麼時候使用array類的物件呢?當你需要使用線性代數運算時就應該使用matrix,而當你需要使用元素級的操作時,就需要使用array。

matrix類有.array()方法,用於將matrix轉換為array。

array類有matrix()方法,用於將array轉換成matrix。

在eigen,在表示式中混合matrix和array操作是被禁止的,但是可以將array表示式結果賦值為matrix。

eigen提供了.const.cwiseproduct(.)方法用於實現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

「eigen教程(4)」

「eigen學習之array類」

Eigen教程4 Array類和元素級操作

相對於matrix提供的線性代數運算,array類提供了更為一般的陣列功能。array類為元素級的操作提供了有效途徑,比如點加 每個元素加值 或兩個資料相應元素的點乘。array是個類模板 類似於matrx 前三個引數是必須指定的,後三個是可選的,這點和matrix是相同的。array typena...

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

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

Eigen學習筆記

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