Я пытаюсь извлечь подматрицу из 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;
}
Я бы ожидать 'подмассив = вид,' более логически близко к назначению интерфейса. Нет времени проверять вещи, хотя – sehe
@sehe Вау, это компиляция, и это именно то, что я хотел. Теперь просто нужно проверить, что правильные данные поступают для езды. –