用特征值初始化向量 C++ 矩阵

Initializing matrix of vectors C++ with eigen

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

Matrix<Vector3d,256,256> Matrix_A;

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

Eigen's Matrix template 第一个模板参数只采用标量类型(而文档暗示可能可以扩展支持的类型,但不清楚如何扩展):

The three mandatory template parameters of Matrix are:

Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>

Scalar is the scalar type, i.e. the type of the coefficients. That is, if you want a matrix of floats, choose float here. See Scalar types for a list of all supported scalar types and for how to extend support to new types.

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

typedef Matrix<float,256,256> my_2dfmat;

std::vector<my_2dfmat> Matrix_A(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;