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混合...