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];
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top