提问者:小点点

std向量到特征/密集向量的矩阵


我尝试从使用StdC++dynamic container for Vectors创建的3D矩阵中读取元素。下面是我如何初始化矩阵:

;(&>;(&>;矩阵3D/代码>

在名为“Classa”的类中,我有以下公共成员:

<代码双倍a,b,C/代码>

然后在我的主文件中,我用以下内容填充矩阵:

现在,当我将双子读入使用Eigen/Dense库创建的向量时,向量的类型变成了一个矩阵:

    Vector3d vectorEigen;
    vectorEigen << matrix3D[i][j][k].a, matrix3D[i][j][k].b, matrix3D[i][j][k].c;

并且成为/code>类型的变量

有人知道我错过了什么吗?


共2个答案

匿名用户

内部特征将向量表示为只有一列的矩阵。所以向量(就像“普通”矩阵一样)实际上是模板类的实例。

然而,为了向程序员简单起见,Eigen使用C++的定义向量类,这些向量是带有特定选项的的同义词。例如,中的类型是元素为

typedef Matrix<double, 3, 1> Vector3d

Matrix template类实际上有6个模板参数,最后3个是默认参数。以下是完整的签名:

template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols >

如果编译器在错误消息中引用/code>,则它所说的是具有以下模板参数的:

    =3/li> =1/li> =0(默认)/li> =(默认情况下)=3 =(默认情况下)=1/li>

因此/code>只是编译器在解析和模板参数后看到的的完整类型。

类型根本没有改变,您只是在代码中使用速记符号,而编译器通过它的显式类型引用它。

匿名用户

如果您只是对用C++实现矩阵和向量感兴趣,那么完全可以忽略我的回答。

但是,如果您只需要使用矩阵和向量,那么您可以尝试OpenCV中的Mat和Vec类。这里有一个很好的关于MAT的教程。

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