Map類用於通過C++中普通的連續指針或者數組 (raw C/C++ arrays)來構造Eigen里的Matrix類,這就好比Eigen里的Matrix類的數據和raw C++array 共享了一片地址,也就是引用。
1. 比如有個API只接受普通的C++數組,但又要對普通數組進行線性代數操作,那么用它構造為Map類,直接操作Map就等於操作了原始普通數組,省時省力。
2. 再比如有個龐大的Matrix類,在一個大循環中要不斷讀取Matrix中的一段連續數據,如果你每次都用block operation 去引用數據,太累(雖然block operation 也是引用類型)。於是就事先將這些數據構造成若干Map,那么以后循環中就直接操作Map就行了。
實際上Map類並沒有自己申請一片空內存,只是一個引用,所以需要構造時初始化,或者使用Map的指針。
引申一下,Eigen里 ref 類也是引用類型,Armadillo 里 subview 都是引用類型,
Eigen開發人說的
The use 'sub' as a Matrix or Map. Actually Map, Ref, and Block inherit from the same base class. You can also use Block.
所以說了這么多,就一句話 Map 就是個引用。
2. 再比如有個龐大的Matrix類,在一個大循環中要不斷讀取Matrix中的一段連續數據,如果你每次都用block operation 去引用數據,太累(雖然block operation 也是引用類型)。於是就事先將這些數據構造成若干Map,那么以后循環中就直接操作Map就行了。
實際上Map類並沒有自己申請一片空內存,只是一個引用,所以需要構造時初始化,或者使用Map的指針。
引申一下,Eigen里 ref 類也是引用類型,Armadillo 里 subview 都是引用類型,
Eigen開發人說的
The use 'sub' as a Matrix or Map. Actually Map, Ref, and Block inherit from the same base class. You can also use Block.
所以說了這么多,就一句話 Map 就是個引用。
例如:
Eigen::Map<const Quaterniond> quaterd(parameters[0]);
Eigen::Map<const Eigen::Vector3d> trans(parameters[0] + 4);
EIGEN3 在/usr/local/include/eigen3中與/usr/include/eigen3中的可以互換