原文: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...