本征:使用函数创建 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