Eigen: создание 3D-массива с функцией - PullRequest
0 голосов
/ 09 ноября 2019

Я только начал использовать Eigen для своего проекта и понял, что он не поддерживает 3D-массивы. Поэтому я решил создать функцию, которая получает указатель типа массива и инициализирует трехмерный массив Eigen. '' '

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?

Большое спасибо.

1 Ответ

0 голосов
/ 09 ноября 2019

Для меня самый простой и наименее подверженный ошибкам способ сделать это - использовать 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 необходимо использовать вышеуказанное включение и выравнивающий распределитель, см. здесь .

...