高效能 Eigen矩陣庫使用事項

2021-07-10 09:20:50 字數 1595 閱讀 2928

1、eigen庫只有矩陣運算功能。eigen相對專一,面對四元數、統計、微積分等高階運算功能,我建議還是使用專業的科**算庫。

2、四階或以下的矩陣,尤其是固定大小的矩陣如

eigen::matrix2i,通常進行了計算優化。

3、注意一下自身和非自身的變化:

說明自身

非自身轉置

transposeinplace

transpose

歸一化normalize

normalized

adjoint

adjoininplace

adjoint

4、普通矩陣運算,不包含svd等,只需要包含:

#include

如果進行svd,則加上

#include

如果不能進行求絕對值、逆矩陣運算,加上

#include

如果不嫌棄編譯速度慢,就全加上

#include

還需要稀疏矩陣的話,使用

#include

這樣,全部庫都加進去了

5、eigen使用了緩式評估(lazy evaluation)策略,其中的運算子過載,並不返回矩陣值,而是返回乙個計算表示類。最終的運算是在賦值等號operator =中進行的,這裡的過載符號解釋了計算表示類,然後進行矩陣運算。緩式評估的優點是計算速度快,避免多次的臨時變數的建立與析構。

6、多用typedef。乙個典型的3階矩陣的表示式為:eigen::matrix3d。我們最好這樣:

typedef eigen::matrix3d mat3d

以後就用mat3d表示3階double型矩陣了。

7、如何使用svd。一般svd用在pca演算法中,物件一般為等階矩陣,因此用full屬性。

假設matlab的**如下:

[s,v,d] = svd(mysvd);

則相應c++**為:

eigen::jacobisvdmysvd(ss, eigen::computefullu |eigen::computefullv);

mat3d s = mysvd.matrixu();

vec3d v = mysvd.singularvalues();

mat3d d = mysvd.matrixv();

8、常用矩陣

單位矩陣:matrix3d::identity();

全1矩陣:matrix3d::ones();

零矩陣:matrix3d::zero();

隨機矩陣:matrix3d::random();

三維向量:eigen::vector3d,本質是matrix

Qt使用Eigen矩陣庫

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

Eigen庫使用注意事項

1.eigen使用只要vs2013的專案屬性中包含目錄有eigen資料夾即可,使用時標頭檔案使用 include eigen dense 使用 include 是有問題的,因為 表示vs2013內建庫檔案的位置 2.eigen的列向量只能與列向量操作,行相量與行相量操作。即使是使用array 後是對...

C 矩陣處理庫 Eigen初步使用

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