Boost C ++ - динамически повторяющийся над несколькими массивами - PullRequest
3 голосов
/ 30 ноября 2011

У меня большой 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];

1 Ответ

0 голосов
/ 01 декабря 2011

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

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

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

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

...