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這...