Eigen介紹及簡單使用2020-05-07

Eigen是可以用來進(jìn)行線性代數(shù)胡桨、矩陣、向量操作等運(yùn)算的C++庫烫堤,它里面包含了很多算法荣赶。它的License是MPL2凤价。它支持多平臺。

Eigen采用源碼的方式提供給用戶使用拔创,在使用時只需要包含Eigen的頭文件即可進(jìn)行使用利诺。之所以采用這種方式,是因?yàn)镋igen采用模板方式實(shí)現(xiàn)剩燥,由于模板函數(shù)不支持分離編譯慢逾,所以只能提供源碼而不是動態(tài)庫的方式供用戶使用。

矩陣的定義:Eigen中關(guān)于矩陣類的模板函數(shù)中灭红,共有六個模板參數(shù)侣滩,常用的只有前三個。其前三個參數(shù)分別表示矩陣元素的類型变擒、行數(shù)和列數(shù)君珠。

矩陣定義時可以使用Dynamic來表示矩陣的行列數(shù)為未知。

Eigen中無論是矩陣還是數(shù)組娇斑、向量策添,無論是靜態(tài)矩陣還是動態(tài)矩陣都提供默認(rèn)構(gòu)造函數(shù),也就是定義這些數(shù)據(jù)結(jié)構(gòu)時都可以不用提供任何參數(shù)毫缆,其大小均由運(yùn)行時來確定唯竹。矩陣的構(gòu)造函數(shù)中只提供行列數(shù)、元素類型的構(gòu)造參數(shù)苦丁,而不提供元素值的構(gòu)造浸颓,對于比較小的、固定長度的向量提供初始化元素的定義芬骄。

矩陣類型:Eigen中的矩陣類型一般都是用類似MatrixXXX來表示猾愿,可以根據(jù)該名字來判斷其數(shù)據(jù)類型,比如”d”表示double類型账阻,”f”表示float類型蒂秘,”i”表示整數(shù),”c”表示復(fù)數(shù)淘太;Matrix2f姻僧,表示的是一個2*2維的,其每個元素都是float類型蒲牧。

數(shù)據(jù)存儲:Matrix創(chuàng)建的矩陣默認(rèn)是按列存儲撇贺,Eigen在處理按列存儲的矩陣時會更加高效。如果想修改可以在創(chuàng)建矩陣的時候加入?yún)?shù)冰抢,如:

Matrix<int,3, 4, ColMajor> Acolmajor;

Matrix<int,3, 4, RowMajor> Arowmajor;

動態(tài)矩陣和靜態(tài)矩陣:動態(tài)矩陣是指其大小在運(yùn)行時確定松嘶,靜態(tài)矩陣是指其大小在編譯時確定。

MatrixXd:表示任意大小的元素類型為double的矩陣變量挎扰,其大小只有在運(yùn)行時被賦值之后才能知道翠订。

Matrix3d:表示元素類型為double大小為3*3的矩陣變量巢音,其大小在編譯時就知道。

在Eigen中行優(yōu)先的矩陣會在其名字中包含有row尽超,否則就是列優(yōu)先官撼。

Eigen中的向量只是一個特殊的矩陣,其維度為1而已似谁。

矩陣元素的訪問:在矩陣的訪問中傲绣,行索引總是作為第一個參數(shù),Eigen中矩陣巩踏、數(shù)組秃诵、向量的下標(biāo)都是從0開始。矩陣元素的訪問可以通過”()”操作符完成蛀缝。例如m(2, 3)既是獲取矩陣m的第2行第3列元素顷链。

針對向量還提供”[]”操作符,注意矩陣則不可如此使用屈梁。

設(shè)置矩陣的元素:在Eigen中重載了”<<”操作符嗤练,通過該操作符即可以一個一個元素的進(jìn)行賦值,也可以一塊一塊的賦值在讶。另外也可以使用下標(biāo)進(jìn)行賦值煞抬。

重置矩陣大小:當(dāng)前矩陣的行數(shù)构哺、列數(shù)革答、大小可以通過rows()、cols()和size()來獲取曙强,對于動態(tài)矩陣可以通過resize()函數(shù)來動態(tài)修改矩陣的大小残拐。注意:(1)、固定大小的矩陣是不能使用resize()來修改矩陣的大械臁溪食;(2)、resize()函數(shù)會析構(gòu)掉原來的數(shù)據(jù)娜扇,因此調(diào)用resize()函數(shù)之后將不能保證元素的值不改變错沃;(3)、使用”=”操作符操作動態(tài)矩陣時雀瓢,如果左右兩邊的矩陣大小不等枢析,則左邊的動態(tài)矩陣的大小會被修改為右邊的大小。

如何選擇動態(tài)矩陣和靜態(tài)矩陣:對于小矩陣(一般大小小于16)使用固定大小的靜態(tài)矩陣刃麸,它可以帶來比較高的效率醒叁;對于大矩陣(一般大小大于32)建議使用動態(tài)矩陣。注意:如果特別大的矩陣使用了固定大小的靜態(tài)矩陣則可能會造成棧溢出的問題。

矩陣和向量的算術(shù)運(yùn)算:在Eigen中算術(shù)運(yùn)算重載了C++的+辐益、-断傲、*

(1)脱吱、矩陣的運(yùn)算:

提供+智政、-、一元操作符”-”箱蝠、+=续捂、-=;二元操作符+/-宦搬,表示兩矩陣相加(矩陣中對應(yīng)元素相加/減牙瓢,返回一個臨時矩陣);一元操作符-表示對矩陣取負(fù)(矩陣中對應(yīng)元素取負(fù)间校,返回一個臨時矩陣)矾克;組合操作法+=或者-=表示(對應(yīng)每個元素都做相應(yīng)操作);矩陣還提供與標(biāo)量(單一數(shù)字)的乘除操作憔足,表示每個元素都與該標(biāo)量進(jìn)行乘除操作胁附;

(2)、求矩陣的轉(zhuǎn)置滓彰、共軛矩陣控妻、伴隨矩陣:

可以通過成員函數(shù)transpose()、conjugate()揭绑、adjoint()來完成弓候。注意:這些函數(shù)返回操作后的結(jié)果,而不會對原矩陣的元素進(jìn)行直接操作他匪,如果要讓原矩陣進(jìn)行轉(zhuǎn)換菇存,則需要使用響應(yīng)的InPlace函數(shù),如transpoceInPlace()等邦蜜;

(3)依鸥、矩陣相乘、矩陣向量相乘:

使用操作符畦徘,共有和*=兩種操作符毕籽;

(4)、矩陣的塊操作:有兩種使用方法:

matrix.block(i,j, p, q) : 表示返回從矩陣(i, j)開始井辆,每行取p個元素关筒,每列取q個元素所組成的臨時新矩陣對象,原矩陣的元素不變杯缺;

matrix.block<p,q>(i, j) :<p, q>可理解為一個p行q列的子矩陣蒸播,該定義表示從原矩陣中第(i, j)開始,獲取一個p行q列的子矩陣,返回該子矩陣組成的臨時矩陣對象袍榆,原矩陣的元素不變胀屿;

(5)、向量的塊操作:

獲取向量的前n個元素:vector.head(n);

獲取向量尾部的n個元素:vector.tail(n);

獲取從向量的第i個元素開始的n個元素:vector.segment(i,n);

Map類:在已經(jīng)存在的矩陣或向量中包雀,不必拷貝對象宿崭,而是直接在該對象的內(nèi)存上進(jìn)行運(yùn)算操作。

原文鏈接:https://blog.csdn.net/fengbingchun/article/details/47378515

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末才写,一起剝皮案震驚了整個濱河市葡兑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赞草,老刑警劉巖讹堤,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厨疙,居然都是意外死亡洲守,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門沾凄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梗醇,“玉大人,你說我怎么就攤上這事搭独∮は鳎” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵牙肝,是天一觀的道長唉俗。 經(jīng)常有香客問我,道長配椭,這世上最難降的妖魔是什么虫溜? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮股缸,結(jié)果婚禮上衡楞,老公的妹妹穿的比我還像新娘。我一直安慰自己敦姻,他們只是感情好瘾境,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镰惦,像睡著了一般迷守。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旺入,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天兑凿,我揣著相機(jī)與錄音凯力,去河邊找鬼。 笑死礼华,一個胖子當(dāng)著我的面吹牛咐鹤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播圣絮,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼祈惶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晨雳?” 一聲冷哼從身側(cè)響起行瑞,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎餐禁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體突照,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帮非,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讹蘑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末盔。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖座慰,靈堂內(nèi)的尸體忽然破棺而出陨舱,到底是詐尸還是另有隱情,我是刑警寧澤版仔,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布游盲,位于F島的核電站,受9級特大地震影響蛮粮,放射性物質(zhì)發(fā)生泄漏益缎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一然想、第九天 我趴在偏房一處隱蔽的房頂上張望莺奔。 院中可真熱鬧,春花似錦变泄、人聲如沸令哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屏富。三九已至,卻和暖如春滑燃,著一層夾襖步出監(jiān)牢的瞬間役听,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留典予,地道東北人甜滨。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像瘤袖,于是被迫代替她去往敵國和親衣摩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349