Adressierung 2.5D zu 1D



  • Hallo zusammen,

    angenommen ich habe so eine Datenstruktur:

    matrix<std::vector<double>> mat;
    

    also eine Matrix aus (unterschiedlich!) langen Vektoren. Ich würde jetzt gerne effizient aus dieser Struktur einen Wert holen können und zwar ohne jedes mal über diese drüber iterieren zu müssen. Also etwa so:

    mat.linear_index(10); // soll das gleiche sein wie ...
    mat[2][1][3] // ... vorrausgesetzt das mat[2][1][3] der 10te Eintrag in mat ist
    

    Wenn ich mat als dreistufigen Tensor implementieren würde wäre das ja einfach, weil ich dann die Indizes einfach umrechnen könnte... Allerdings wäre das ja ziemliche Platzverschwendung, denn die allermeisten der Vektoren haben einfach Länge 1.

    Wie könnte man das am besten lösen?



  • Wenn du dir die Länge der einzelnen Vektoren in einem zusätzlichen Array/Vektor nachhälst kannst du vielleicht mit Prefix- oder Ranking Operationen (hießen die so?!) was rumtrixen, aber da müsst ich selbst auch mal etwas drüber nachdenken und was nachschauen.

    Aber außer über die Matrix zu iterieren und die Länge nachzurechnen fällt mir grad nicht ein. Holzhammer-Methode aber klappt garantiert 😉


Anmelden zum Antworten