Eigen:使用函数创建3D数组

问题描述 投票:0回答:1

我刚刚开始在我的项目中使用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数组的一种好方法吗?

是否有使用Eigen使用3D阵列的标准化方法?

非常感谢。

c++ eigen eigen3
1个回答
0
投票

对我来说,执行此操作的最简单且最不容易出错的方法是使用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与本征一起使用,必须包含上述包含项,并且必须使用对齐的分配器,请参见here

© www.soinside.com 2019 - 2024. All rights reserved.