用特征值初始化向量 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;
我的最终目标是使用 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;