Frage

Ich habe ein großes 2D -Multi_Array, das ich auf einen kleineren Datensatz (auch 2D) reduzieren muss. Zur Laufzeit habe ich einen Vektor der Spaltenindizes, die ich auswählen und in das Sub-Array einfügen möchte.

Ich weiß, dass Sie mit Boost :: multi_array_types :: index_range ein Unterarray aus dem ursprünglichen Array erstellen können, aber alle Beispiele, die ich sehe, verwenden Sie hartcodierte Bereiche. Gibt es eine Möglichkeit, den Index_Range zur Laufzeit mit einem Wertevektor festzulegen, oder ist dies in multi_array einfach nicht möglich?

Ich suche so etwas wie

vector<int> columnIndex; // contains some values
boost::multi_array_types::index_range range;
for(int idx = 0; idx < columnIndex.size(); ++idx)
     range = columnIndex[idx];
War es hilfreich?

Lösung

Ich habe den Boost -Code für Boost :: multi_array_types :: index_range angesehen und festgestellt, dass dies nicht möglich ist. Die Klasse verfügt nur über drei Mitglieder, um Indexwerte zu speichern - Start, Finish und Stride. Es kann nicht komplexere Werte speichern.

Da die Anzahl der Spalten, die ich benötige, dynamisch ist, habe ich einen Vektor von Sub-Arrays (Array_View) verwendet.

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

und nur nach Bedarf zum Vektor hinzugefügt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top