Вопрос

У меня есть большой 2D Multi_array, который мне нужно уменьшить до меньшего набора данных (также 2D). Во время выполнения у меня есть вектор индексов столбцов, которые я хочу выбрать и поместить в суб-арайю.

Я знаю, что вы можете создать подрамешку из исходного массива, используя Boost :: multi_array_types :: index_range, но все примеры, которые я вижу, используют жесткие диапазоны. Есть ли способ установить index_range во время выполнения, используя вектор значений, или это просто невозможно в multi_array?

Я хочу сделать что -то вроде

vector<int> columnIndex; // contains some values
boost::multi_array_types::index_range range;
for(int idx = 0; idx < columnIndex.size(); ++idx)
     range = columnIndex[idx];
Это было полезно?

Решение

Я изучил код Boost для Boost :: multi_array_types :: index_range и обнаружил, что это невозможно. В классе есть только три участника для хранения значений индекса - запуска, отделки и шага. Он не может сохранить более сложный набор значений.

Поскольку количество столбцов, которые мне нуждаются, является динамичным, я использовал вектор суб-мариоров (array_view),

vector<boost::multi_array_ref<double, 2>::array_view<2>::type::const_reference

и только что добавил к вектору по мере необходимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top