C 矩陣處理庫 Eigen初步使用

2021-09-07 03:27:48 字數 1939 閱讀 7076

專案要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態二維陣列,於是寫了一堆matrix函式,作矩陣的乘除加減求逆求行列式。實驗做完了,開始做**優化,發現matrix.h檔案裡適用性太低,而且動態二維陣列的空間分配與釋放也影響效率,於是尋找其他解決方案。

首先考慮的是與matlab混合程式設計,折騰了半天把matlab環境與vs2010環境之後,發現matlab編譯出來的函式使用起來也比較麻煩,要把陣列轉化成該函式適用的型別後才能使用這些函式。我的二維陣列也不是上千萬維的,估計這個轉化的功夫就犧牲了一部分效率了。(如果誰有混合程式設計的心得,求幫忙,囧。。。)

接著想到使用一維陣列的方法,或者把一維陣列封裝在乙個類裡邊。想著又要寫一堆矩陣操作函式頭就大,索性谷歌了一下矩陣處理庫,除了自己之前知道的opencv庫(之前由於轉化cvarr麻煩,於是放棄),還有eigen, armadillo。

該部落格對這三個庫的效率做了乙個簡單的評測,opencv庫的矩陣操作效率是最低的,還好我沒使用。eigen速度最快,與自己定義陣列的操作效率相當(- -,才相當嗎?我本來還想找個更快的呢)。於是選擇使用eigen。

進入正題。

安裝:簡單使用:

看了一下官方文件,eigen庫除了能實現各種矩陣操作外,貌似還提供《數學分析》中的各種矩陣操作(包括l矩陣u矩陣)。目前我使用到的還是簡單的矩陣操作,如加減乘除,求行列式,轉置,逆,這些基本操作只要:

[cpp]view plain

copy

print?

#include "eigen/eigen"  

using namespace eigen;  

就能實現,別忘了名空間eigen。

包含的型別:

matrices

arrays

matrix<=> matrixxf

matrix<=> vectorxd

matrix<=> rowvectorxi

matrix<=> matrix3f

matrix<=> vector4f

array<=> arrayxxf

array<=> arrayxd

array<=> rowarrayxi

array<=> array33f

array<=> array4f

如上表,主要包括兩種型別,matrices與arryays,接著是這兩種型別的派生型別。現在我用到的是matrices(我不明白這兩種型別在效率間有什麼差距,囧。。。),

其中matrix代表二維矩陣,vector代表列向量rowvector代表行向量。如果後面跟著x,則代表是動態的陣列,執行時可以根據需求改變,如果是數字,則代表是靜態的(根據實驗,最多能建立4維的靜態矩陣或者陣列,- -,為嘛不是6維,實驗正好需要)。i代表int型別,f代表float型別,d代表double。

對應關係:

matrix

二維矩陣

vector

列向量rowvector

行向量x

動態固定數字n

靜態,4>=n>=1

iint

ffloat

ddouble

arrays型別的話也跟matrices差不多。

基本操作,定義,初始化,矩陣操作:

[cpp]view plain

copy

print?

#include #include "eigen/eigen"

using namespace std;

using namespace eigen;

void foo(matrixxf& m)

int main()

去**更深入學習?

C 矩陣處理庫 Eigen初步使用

專案要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態二維陣列,於是寫了一堆matrix函式,作矩陣的乘除加減求逆求行列式。實驗做完了,開始做 優化,發現matrix.h檔案裡適用性太低,而且動態二維陣列的空間分配與釋放也影響效率,於是尋找其他解決方案。首先考慮的是與matlab混合...

Eigen初步1 初步體驗Eigen庫

前言 eigen 是乙個線性算術的c 模板庫,包括 vectors,matrices,開源以及相關演算法。功能強大 快速 優雅以及支援多平台,可以使用該庫來方便處理一些矩陣的操作,達到類似matlab那樣的快捷。現在已經發展到eigen3了,目前最新版本為eigen 3.1.2。eigen使用預備工...

Qt使用Eigen矩陣庫

eigen官網 解壓後放在任意資料夾內,然後在qt專案中的pro檔案中加上eigen的目錄 如果沒有載入成功,重新構築即可 includepath d eigen3新增標頭檔案 include定義向量 字尾是變數型別,例如float矩陣是matrix2f vector2d a 5.0,6.0 cou...