Eigen的使用總結3 Map類

2021-09-30 20:25:10 字數 734 閱讀 3116

eigen預設採用列主導(column major)的資料儲存形式,這點和fortran還有matlab是一樣的,當然也可以選擇採用行主導,但是我感覺真心沒必要。我一開始比較關心的是eigen是否定義了比較方便的額slicing操作。但是似乎eigen的slicing和我理解的不太一樣,有點複雜。eigen的文件中,slicing和reshape是一起講的,原因在於他們都是利用eigen定義的map功能實現的。

簡單理解map就是將原始「連續記憶體儲存」的資料,以矩陣形式重新組織。在使用map時就需要原始資料,map後的資料的維度形式,map時使用的stride設定。所謂stride,既指矩陣中沿著矩陣列或行方向移動乙個位置,記憶體中需要移動的位置數。這個需要移動的記憶體位置數與矩陣採用的儲存方式有關(列或行主導)。eigen定義了常用的stride,既innerstride和outerstride。最好理解以上兩個stride的方法就是看例項。innerstride既表示沿著矩陣的資料儲存方向移動乙個元素的位置,在記憶體中需要移動的寬度。outerstride的含義就是不沿著資料儲存方向移動乙個位置,在記憶體中需要移動的寬度。還是用例項進行說明。

#include #include using namespace eigen;

using namespace std;

void run_eigen_test2()

參考: 

Eigen的map函式使用

經常會處理其他資料結構和eigen的轉換,比如把opencv的mat轉為eigen的matrix,或者std vector的填入matrix。在不進行拷貝的情況下可以使用eigen的map功能進行記憶體對映。不過一定注意對映後的記憶體不要被原結構釋放了 直接上例子 int array 9 eigen...

Eigen庫中的Map類到底是做什麼的?

map類用於通過c 中普通的連續指標或者陣列 raw c c arrays 來構造eigen裡的matrix類,這就好比eigen裡的matrix類的資料和raw c array 共享了一片位址,也就是引用。1.比如有個api只接受普通的c 陣列,但又要對普通陣列進行線性代數操作,那麼用它構造為ma...

C 中map的使用總結

一 定義 mapmap 宣告乙個容器 map.size 返回 map中元素的個數 map iterator it 宣告乙個 迭代器二 插入資料 插入資料之前先說一下pair 和 make pair 的用法pair是乙個結構體,有 first 和second 兩個域,可以直接訪問 1 string k...