本征:使用函数创建 3D 数组
Eigen: creating a 3D array with a function
我刚开始在我的项目中使用 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;
}
问题是,这是 create/delete 具有 Eigen 的 3d 数组的正确方法吗?
是否有将 3D 数组与 Eigen 一起使用的标准化方法?
非常感谢。
对我来说,最简单、最不容易出错的方法是使用 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 一起使用,必须使用上述包含和对齐的分配器,请参阅 here。
我刚开始在我的项目中使用 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;
}
问题是,这是 create/delete 具有 Eigen 的 3d 数组的正确方法吗?
是否有将 3D 数组与 Eigen 一起使用的标准化方法?
非常感谢。
对我来说,最简单、最不容易出错的方法是使用 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 一起使用,必须使用上述包含和对齐的分配器,请参阅 here。