J'ai une matrice entière qui doit agir comme un tampon:C: moyen astucieux de "décaler" une matrice?
x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};
Maintenant, si j'ajoute une nouvelle ligne {3, 3, 3, 3, 3}
, la nouvelle matrice devrait ressembler à:
x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};
est-il une manière intelligente de faire ceci sans copier tous les éléments autour?
Plusieurs réponses ci-dessous sont techniquement correctes, mais elles impliquent toutes des compromis différents. Pouvez-vous développer un peu votre utilisation prévue? Quelle sera la taille de ces matrices? À quelle fréquence prévoyez-vous d'ajouter une ligne, par rapport au nombre de fois où vous allez accéder aux données à partir des matrices? Allez-vous accéder à des éléments individuels de la matrice, ou sera-t-il seulement lu comme une entité entière du début à la fin? Voulez-vous être en mesure de libérer des parties de la matrice de temps en temps? Si oui, juste à la fin, ou depuis le début, ou à partir d'une rangée arbitraire? –
La matrice n'est pas grande (comme 100 éléments au total).Je vais toujours accéder à la totalité de la matrice, la "vieille" ligne peut disparaître (comportement fifo-queue), les mises à jour arrivent très souvent. –
Dans ce cas, l'approche modulo proposée par @ruslik est probablement votre meilleur pari. Juste allouer un tableau qui peut gérer la taille maximale, maintenir un pointeur vers la tête actuelle, et enrouler autour de la fin du tableau lorsque vous manquez de place. –