Question

J'ai un grand multi_array 2D que je dois réduire à un ensemble plus restreint de données (également en 2D). Lors de l'exécution, j'ai un vecteur des indices de colonne que je veux sélectionner et mettre dans le sous-tableau.

Je sais que vous pouvez créer un sous-réseau à partir du tableau d'origine en utilisant boost :: multi_array_types :: index_range, mais tous les exemples que je vois utiliser des plages hardcoded. Est-il un moyen de régler la index_range lors de l'exécution en utilisant un vecteur de valeurs, ou est-ce tout simplement pas possible multi_array?

Je cherche à faire quelque chose comme

vector<int> columnIndex; // contains some values
boost::multi_array_types::index_range range;
for(int idx = 0; idx < columnIndex.size(); ++idx)
     range = columnIndex[idx];
Était-ce utile?

La solution

J'ai regardé dans le code de coup de pouce pour boost :: multi_array_types :: index_range, et a constaté que cela est impossible. La classe ne compte que trois membres à stocker des valeurs d'index - début, la fin et la foulée. Il ne peut pas stocker un ensemble plus complexe de valeurs.

Étant donné que le nombre de colonnes que j'ai besoin est dynamique, j'ai utilisé un vecteur de sous-réseaux (array_view),

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

et juste ajouté au vecteur selon les besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top