Boost C ++ - iterando dinámicamente sobre múltiples matrices
-
26-10-2019 - |
Pregunta
Tengo un gran 2D multi_array que necesito reducir a un conjunto más pequeño de datos (también 2D). En tiempo de ejecución, tengo un vector de los índices de columna que quiero seleccionar y poner en la subarray.
Sé que puedes crear una subraye a partir de la matriz original usando Boost :: Multi_array_Types :: Index_Range, pero todos los ejemplos que veo usan rangos codificados. ¿Hay alguna forma de establecer el index_range en tiempo de ejecución usando un vector de valores, o esto simplemente no es posible en multi_array?
Estoy buscando hacer algo como
vector<int> columnIndex; // contains some values
boost::multi_array_types::index_range range;
for(int idx = 0; idx < columnIndex.size(); ++idx)
range = columnIndex[idx];
Solución
Busqué el código de impulso para Boost :: Multi_Array_Types :: Index_Range, y descubrí que esto no es posible. La clase tiene solo tres miembros para almacenar valores de índice: comenzar, terminar y pasar. No puede almacenar un conjunto de valores más complejo.
Dado que el número de columnas que necesito es dinámica, utilicé un vector de sub-matrices (array_view),
vector<boost::multi_array_ref<double, 2>::array_view<2>::type::const_reference
Y solo se agregó al vector según sea necesario.