Ich habe eine ganze Matrix, das wie ein Puffer wirken soll:C: clevere Möglichkeit, eine Matrix zu "verschieben"?
x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};
Nun, wenn ich eine neue Zeile {3, 3, 3, 3, 3}
, die neue Matrix hinzufügen soll wie folgt aussehen:
x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};
Gibt es Eine clevere Art dies zu tun, ohne alle Elemente zu kopieren?
Mehrere Antworten sind technisch korrekt, aber alle beinhalten unterschiedliche Kompromisse. Können Sie Ihre erwartete Verwendung etwas erweitern? Wie groß werden diese Matrizen sein? Wie oft rechnen Sie damit, dass Sie eine Zeile hinzufügen, verglichen mit der Häufigkeit, mit der Sie auf Daten aus den Matrizen zugreifen? Werden Sie auf einzelne Elemente der Matrix zugreifen, oder werden sie nur von Anfang bis Ende als ganze Entität gelesen? Möchten Sie Teile der Matrix von Zeit zu Zeit freigeben können? Wenn ja, nur vom Ende oder vom Anfang oder von einer willkürlichen Reihe? –
Die Matrix ist nicht groß (wie 100 Elemente insgesamt).Ich werde immer auf die ganze Matrix zugreifen, die "alte" Zeile kann weggehen (Fifo-Queue-Verhalten), Updates kommen sehr oft vor. –
In diesem Fall ist der von @ruslik vorgeschlagene Modulo-Ansatz wahrscheinlich die beste Wahl. Ordnen Sie einfach ein Array zu, das die maximale Größe verarbeiten kann, behalten Sie einen Zeiger auf den aktuellen Kopf bei und wickeln Sie das Ende des Arrays um, wenn kein Platz mehr ist. –