[英]Matrix from std vector to vector from Eigen/Dense
我嘗試從使用std c ++動態容器創建矢量的3D矩陣中讀取元素。 以下是我初始化矩陣的方式:
typedef vector<vector<vector<ClassA> > > matrix3D;
在名為“ ClassA”的班級中,我具有以下公共成員:
double a, b, c;
然后在我的主文件中,用以下內容填寫矩陣:
double varA=M_PI; double varB=varA; double varC=varA;
matrix3D[i][j][k].a = varA;
matrix3D[i][j][k].b = varB;
matrix3D[i][j][k].c = varC;
現在,當我將雙打讀入使用Eigen / Dense庫創建的向量中時,向量的類型變為矩陣:
Vector3d vectorEigen;
vectorEigen << matrix3D[i][j][k].a, matrix3D[i][j][k].b, matrix3D[i][j][k].c;
並且vectorEigen
變成類型為Eigen::Matrix<double, 3,1,0,3,1>
的變量
有人知道我在這里錯過了什么嗎?
在內部,本征將向量表示為只有一列的矩陣。 因此,向量(就像“普通”矩陣一樣)實際上是Eigen::Matrix
模板類的實例。
然而,為了簡化程序員,Eigen使用C ++的typedef
定義向量類,這些向量類是Eigen::Matrix<>
同義詞,帶有特定選項。 例如, Eigen
的Vector3d
類型是一個矩陣的typedef ,該矩陣的元素為double
,並且具有3行和1列:
typedef Matrix<double, 3, 1> Vector3d
Matrix模板類實際上有6個模板參數,最后3個是默認參數。 這是完整的簽名:
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >
如果編譯器在錯誤消息中引用Eigen::Matrix<double, 3,1,0,3,1>
,則它是在談論Eigen::Matrix
並帶有以下模板參數:
_Scalar
= double _Rows
= 3 _Cols
= 1 _Options
= 0(默認情況下) _MaxRows
= _Rows
(默認情況下)= 3 _MaxCols
= _Cols
(默認)= 1 因此, Eigen::Matrix<double, 3,1,0,3,1>
僅僅是豐滿型的Vector3d
編譯器解決后看到typedef
和模板參數。
類型完全沒有改變,您只需要在代碼中使用Vector3d
速記符號,而編譯器則通過其顯式類型對其進行引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.