-1
votes

Comportement étrange avec la liste et Ndindex

J'espère que ce n'est pas redondant avec une autre question, mais j'aimerais comprendre le résultat suivant que je reçois lors de l'exécution sur un ordinateur portable Jupyter:

f=np.zeros((2,5,7))
l = np.ndindex(f.shape)
count=0
for i in l:
    count+=1
print(count)
la = l
list(la)
count=0
for i in l:
    count+=1
print(count)

70
0


0 commentaires

3 Réponses :


2
votes

nd.ndindex () renvoie un itérateur, qui ne peut être itéré que une fois.


0 commentaires

2
votes

selon la documentation sur ndindex

Un objet itérateur N-dimensionnel aux tableaux d'indexation.

Il renvoie un objet Itérateur. Donc l a un objet d'interactivité. Vous avez ensuite itérale à travers tous les articles de l'itérateur et essentiellement que l'itérateur est vide.

Vous faites alors faire la une copie de l donc La a maintenant le même objet itérateur qui dans l . Mais l a déjà itéré cela afin qu'il n'y ait pas d'objets dedans.

Alors, lorsque vous essayez ensuite de itérer sur la , vous n'allez pas dans la boucle car il n'y a pas d'éléments laissés dans l'itérateur. Vous pouvez voir le même comportement si vous essayez simplement de itérer sur l deux fois


0 commentaires

1
votes

Vous obtenez un objet itérateur à la recherche de quelque chose comme .

Comme décrit dans DICS - .ndindex () renvoie: un objet itérateur N-dimensionnel aux tableaux d'index.

Initialement, le pointeur est défini sur 0th index et pour accéder à l'élément suivant __ suivant __ () est appelé sur l'itérateur.

Vous êtes maintenant itération de l'objet dans la première boucle qui appelle le __ suivant __ () , définissant ainsi le pointeur d'index actuel sur le dernier index de l'itérateur.

Maintenant, vous effectuez une copie de l'objet itérateur avec toutes les propriétés qu'il a compris le pointeur de l'index actuel.

Donc, la deuxième fois que vous essayez de vous déplacer, vous n'avez pas d'éléments laissés et que la valeur du nombre reste donc 0 . .


0 commentaires