簡體   English   中英

從標准向量到本征/密度向量的矩陣

[英]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<>同義詞,帶有特定選項。 例如, EigenVector3d類型是一個矩陣的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速記符號,而編譯器則通過其顯式類型對其進行引用。

如果您只是對使用C ++實現Matrix和Vector感興趣,則可以完全忽略我的回答。

但是,如果只需要使用 Matrix和Vector,則可以嘗試OpenCV中MatVec類。 這里是有關Mat的很好的教程。

另外,如果您不一定需要使用C ++,那么Octave更加方便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM