我刚开始在我的项目中使用Eigen,我意识到它不支持3D阵列。因此,我决定制作一个函数,获取数组类型的指针并初始化Eigen 3D数组。''
ArrayXXf* Array3DInit (ArrayXXf *&array, int dimension[], float val){
array = new ArrayXXf [dimension[0]];
for (int i=0; i<dimension[0]; i++){
array[i] = (ArrayXXf::Ones(dimension[1], dimension[2])*val);
}
return array;
}
''
由于我们是动态分配2D阵列的,我创建了另一个函数来删除初始化的3D阵列,如下所示,
void Array3Ddel (ArrayXXf *&array){
delete []array;
}
问题是,这是创建/删除具有Eigen的三维数组的好方法吗?
有没有一种标准化的方法来使用具有特征的3D阵列?
非常感谢。
对我来说,最简单、最不容易出错的方法是使用std::vector
:
#include <Eigen/StdVector>
using Matrix = Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>;
using Vector = std::vector<Matrix, Eigen::aligned_allocator<Matrix>>;
Matrix m(2,2);
m << 1.0, 2.0, 3.0, 4.0;
Vector vec;
vec.push_back(m);
要将std::vector
与Eigen一起使用,必须使用上面的include和对齐的分配器,请参阅此处。