Выполнение перестановки измерения в Boost multi_array

Я пишу программу на C++ с использованием библиотеки Boost multi_array. У меня есть 4-мерный массив, например, с формой [5][10][100][20], И я хотел бы изменить форму массива на [100][10][5][20], Каков был бы правильный способ сделать это?

Спасибо

1 ответ

Предполагая, что вы запрашиваете изменение формы, а не перестановку измерений (эти операции не совпадают), вы можете использовать reshape функция-член boost::multi_arrayПримерно так (пример взят из документации Boost Multi-Array)

typedef boost::multi_array<double, 3> array_type;

array_type::extent_gen extents;
array_type A(extents[2][3][4]);
boost::array<array_type::index, 3> dims = {{4, 3, 2}};       
A.reshape(dims);

Полный пример ниже:

#include <iostream>
#include <boost/multi_array.hpp>

int main()
{
    using array_type = boost::multi_array<double, 2>;

    array_type::extent_gen extents;
    array_type A(extents[1][2]); // 1 x 2 array

    A[0][0] = 1; A[0][1] = 2;
    std::cout << A[0][0] << ' ' << A[0][1] << '\n';

    boost::array<array_type::index, 2> dims = {{2,1}};
    A.reshape(dims); // reshape it to 2 x 1

    std::cout << A[0][0] << ' ' << A[1][0] << '\n'; // verify
}

Жить на Wandbox

Что касается перестановки измерений, насколько я знаю boost::multi_array не имеет никакой функции для этого, поэтому вам нужно написать свою собственную.

Другие вопросы по тегам