Извлечение подмассива из multi_array

Я пытаюсь извлечь подмассив из multi_array. Для этой демонстрации давайте предположим, что нет свернутых измерений (то есть размерность подмассива такая же, как и у исходного массива). Я думаю, что я строю представление с запрошенными экстентами правильно (хотя и неловко …), но теперь, как мне скопировать данные из запрошенных индексов (или все индексы представления) в подмассив? Вот схема:

#include <boost/multi_array.hpp>

const unsigned int Dimension = 3;
using ArrayType = boost::multi_array<double, Dimension>;
using IndexType = boost::array<ArrayType::index, Dimension>;

ArrayType ExtractSubGrid(const ArrayType& array, const typename boost::detail::multi_array::index_gen<Dimension, Dimension>& indices)
{
typename ArrayType::template const_array_view<Dimension>::type view = array[indices];

IndexType subArraySize;
for(size_t dim = 0 ; dim < Dimension; ++dim) {
subArraySize[dim] = indices.ranges_[dim].finish_ - indices.ranges_[dim].start_;
}

ArrayType subArray;
subArray.resize(subArraySize);

// How to do this?
//subArray.data() = view.data();

return subArray;
}

int main()
{
ArrayType myArray(IndexType({{3,4,2}}));

boost::detail::multi_array::index_gen<3,3> indices = boost::indices[ArrayType::index_range(0,2)][ArrayType::index_range(1,3)][ArrayType::index_range(0,4)];

ArrayType subGrid = ExtractSubGrid(myArray, indices);

return 0;
}

0

Решение

Будет ли что-то вроде этой помощи:

std::copy(view.begin(), view.end(), subArray.begin());
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector