使用特征

时间:2018-11-07 12:51:45

标签: c++ c++11 matrix vector eigen

我的最终目标是使用c ++的本征模块,建立一个矩阵,其中每个元素都是一个向量,这样我就可以对矩阵求和。 我想出的数据类型是:

Matrix<Vector3d,256,256> Matrix_A;

对于256x256矩阵,其中每个元素的数据类型为Vector3D。这是行不通的。 这有可能吗?

2 个答案:

答案 0 :(得分:3)

如果您阅读编译器的错误消息,则会发现以下内容:

error: static_assert failed "OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG"

意味着对于这么大的对象,您应该移至动态分配的矩阵类型:

int N = 256;
using Mat = Matrix<Vector3d,Dynamic,Dynamic>;
Mat A(N,N), B(N,N);
Mat C = A+B;

答案 1 :(得分:2)

Eigen's Matrix template仅将第一个模板参数作为标量类型(而文档提示可能扩展受支持的类型,但尚不清楚如何做到):

  

Matrix的三个必需模板参数为:

     

Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

     

标量是标量类型,即系数的类型。也就是说,如果要使用浮点数矩阵,请在此处选择浮点数。有关所有受支持的标量类型的列表以及如何将支持扩展到新类型的信息,请参见标量类型。

这意味着无法定义向量矩阵。我看到的唯一可能性是使用本征std::vector对象中的Matrix

typedef Matrix<float,256,256> my_2dfmat;

std::vector<my_2dfmat> Matrix_A(3);

这确实有一些缺点,例如索引顺序不直观等。