Выполнение перестановки измерения в 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
}
Что касается перестановки измерений, насколько я знаю boost::multi_array
не имеет никакой функции для этого, поэтому вам нужно написать свою собственную.