[英]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.