C 矩陣運算工具箱Eigen

2021-06-19 22:51:15 字數 1913 閱讀 8005

因為要把matlab的演算法寫成c++的程式,涉及到的矩陣運算較多,所以需要找個好用的矩陣運算庫。現成的矩陣運算庫很多,但是使用的難易程度和計算效能差別很大。如果乙個庫安裝比較方便,並且符號規則和matlab相似,那就最好了。最終看到

這裡有個推薦,發現了eigen這個庫。

eigen的最大優勢是使用方便,且跨平台。它本身僅有許多標頭檔案組成,使用時做的就是把用到的標頭檔案和**放在一起就可以了。另外使用者眾多(如google),這樣有問題時查詢也比較方便。它本身也有個wiki,因此說明性文件也算全面。

[cpp]view plain

copy

#include 

using

namespace

eigen;  

即可使用。

eigen中常用的資料型別是matrix和vector,對於浮點運算,eigen 支援float和double。另外,matrix和vector分為固定大小(fixed size)和動態大小(dynamic size)兩種。以matrix為例,做如下定義:

[cpp]view plain

copy

matrix3f a;  

matrixxf b;  

matrixxf c(10,15);  

即定義了乙個3-by-3的方陣a,其中的資料型別是float,乙個動態長度的矩陣b,其當前大小為0-by-0,但可以被賦值為任意大小,以及乙個10-by-15的矩陣c。如果使用double,則將matrixxf 替換為matrixxd。vector的定義方法類似。

通過官網上一段完整的程式,可以了解使用eigen以及定義matrix或vector的基本方法。

[cpp]view plain

copy

#include 

#include 

using

namespace

eigen;  

intmain()    

輸出結果為:

[plain]view plain

copy

here is the matrix m:  

3  -1  

2.5 1.5  

here is the vector v:  

4  3  

當固定大小vector小於4個變數時,可以採用如下方法初始化:

[cpp]view plain

copy

vector2d a(5.0, 6.0);  

vector3d b(5.0, 6.0, 7.0);  

vector4d c(5.0, 6.0, 7.0, 8.0);  

一般而言,eigen提供了用逗號初始化的語法格式:

[cpp]view plain

copy

matrix3f m;  

m << 1, 2, 3,  

4, 5, 6,  

7, 8, 9;  

這樣m為:

[plain]view plain

copy

1 2 3  

4 5 6  

7 8 9  

除此之外,和matlab類似,eigen也支援初始化為特殊矩陣或向量,這裡簡單總結如下:

matlab

eigen

zeros()

setzero()

rand()

setrandom()

eye()

setidentity()

ones()

setones()

**:

enfp工具箱怎麼用 隱喻 你的工具箱

分享一些在心理諮詢中好用的隱喻。在幫助家庭學習新的溝通方式時,我喜歡 工具箱 這個隱喻。顧名思義,工具箱裡裝著各種各樣的工具,不同工具適用於不同場合。有些工具你裝備了未必用得上,但你不會嫌工具太多。學習一種新的方式,彷彿就要替換掉舊的方式。他會擔心失去一些東西,喚起取捨的焦慮。比如,教乙個人拒絕別人...

3 C 工具箱 容器

容器特點 把控制項放到容器裡,移動容器控制項也會跟著移動。1 flowlayoutpanel 流布局控制項 放入控制項後,會自動垂直或水平排列 拉長布局,控制項自動跑到一行 2 groupbox 組合框 給視覺上是一組資料 3 panle 1 可以組合使用panle裡再放幾個panle 設定內部pa...

大資料 工具箱

當前,整個網際網路正在從it時代向dt時代演進,大資料技術也正在助力企業和公眾敲開dt世界大門。當今 大資料 一詞的重點其實已經不僅在於資料規模的定義,它更代表著資訊科技發展進入了乙個新的時代,代表著 性的資料資訊給傳統的計算技術和資訊科技帶來的技術挑戰和困難,代表著大資料處理所需的新的技術和方法,...