7
votes

Accéder à un tableau Certains éléments à la fois et enroulez-vous au début

J'ai une question simple qui devrait avoir une réponse simple mais je ne peux pas y penser encore. Je tiens à traiter un tableau, un certain nombre d'éléments à la fois et d'emballage au début.

Voici un diagramme montrant quand n est de 10 et trois éléments sont recherchés à chaque fois:

 itérations 3 à la fois

Mes tentatives d'écrire une itération simple jusqu'à présent ont échoué: utiliser % n me donne des zéros, qui ne fonctionnent pas avec une indexation unique de Julia ... :)


1 commentaires

Beau diagramme. Habituellement avant de faire % n Vous devez soustraire 1, puis ajouter 1 (rappelant la transformation de base matricielle dans l'algèbre linéaire). En outre, il existe des packages qui permettent une indexation de tableaux à 0 (et autres) à base de tableaux, voir offsetArrays ( Github.com /alsam/offsetarrays.jl ).


4 Réponses :


1
votes

pour xxx

do xxx

puis xxx

Bonus

Si vous voulez sur l'ingénieur, ceci, ou mémoire est un problème (repmat n'est pas exactement efficace de mémoire) xxx


0 commentaires

1
votes

Vous pouvez simplement le définir vous-même? Comme: xxx

println pourrait être ce que vous voulez?


0 commentaires

10
votes

La fonction mod1 code> est fournie pour permettre le comportement que vous désirez: xxx pré>

Il est assez simple de faire une fonction mod-indexée: p>

julia> threes(A) = let cy = cycle(A)
           take(zip(cy, drop(cy, 1), drop(cy, 2)), length(A))
       end
threes (generic function with 1 method)

julia> for (a, b, c) in threes([1, 2, 3, 4, 5])
           println(a, b, c)
       end
123
234
345
451
512


3 commentaires

Une solution propre pourrait être modindex (a, i) = a [mod1. (I, fin)] . C'est Super Terse et vous pouvez faire de la tranchée.


Bonne réponse, exactement ce dont j'avais besoin. Merci.


Dans la définition de Circarray ne devrait pas t dans la superclasse être remplacé par le paramètre de t ? (ou le paramètre a refouturé pour être le elype de la matrice, avec modificateur vecteur supplémentaire sur xs )



4
votes

itérators.jl vous donnera le Itérateur simple à < em> "Accéder à un tableau Certains éléments à la fois" : xxx

et comme Fengyang Wang suggéra, la fonction mod1 est le ". Emballage rond au début " travail. Il suffit de faire une combinaison: xxx


1 commentaires

Vous pouvez également envisager d'utiliser cycle sur l'itérateur, puis prendre le résultat. J'ai incorporé une solution similaire dans ma réponse.