Eigen中定義了一系列的vector和matrix,相比copy數據,更一般的方式是復用數據的內存,將它們轉變為Eigen類型。Map類很好地實現了這個功能。
Map定義
Map(PointerArgType dataPtr, Index rows, Index cols, const StrideType& stride = StrideType())
可以看出,構建map變量,需要三個信息:指向數據的指針,構造矩陣的行數和列數
map相當於引用普通的c++數組,進行矩陣操作,而不用copy數據
Eigen::MatrixXf
動態矩陣和靜態矩陣:動態矩陣是指其大小在運行時確定,靜態矩陣是指其大小在編譯時確定。
MatrixXd:表示任意大小的元素類型為double的矩陣變量,其大小只有在運行時被賦值之后才能知道。
Matrix3d:表示元素類型為double大小為3*3的矩陣變量,其大小在編譯時就知道。
如何選擇動態矩陣和靜態矩陣:對於小矩陣(一般大小小於16)使用固定大小的靜態矩陣,它可以帶來比較高的效率;對於大矩陣(一般大小大於32)建議使用動態矩陣。注意:如果特別大的矩陣使用了固定大小的靜態矩陣則可能會造成棧溢出的問題。
矩陣元素的訪問:在矩陣的訪問中,行索引總是作為第一個參數,Eigen中矩陣、數組、向量的下標都是從0開始。矩陣元素的訪問可以通過”()”操作符完成。例如m(2, 3)既是獲取矩陣m的第2行第3列元素。
針對向量還提供”[]”操作符,注意矩陣則不可如此使用。
Eigen::MatrixXf range_wf;
const float dcenter = range_wf(u)
動態矩陣,類型是float,括號"()"用來引用下標為u的數據(這里應該是向量)
Eigen::MatrixXf::Constant(1, cols_i, 0.f)
Constant常量向量,值為0