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
3 Réponses :
nd.ndindex () code> renvoie un itérateur, qui ne peut être itéré que une fois. p>
selon la documentation sur ndindex p>
Un objet itérateur N-dimensionnel aux tableaux d'indexation. P> blockQuote>
Il renvoie un objet Itérateur. Donc
l code> 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. p>Vous faites alors faire
la code> une copie del code> doncLa code> a maintenant le même objet itérateur qui dansl code> . Maisl code> a déjà itéré cela afin qu'il n'y ait pas d'objets dedans. p>Alors, lorsque vous essayez ensuite de itérer sur
la code>, 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 surl code> deux fois p>
Vous obtenez un objet itérateur à la recherche de quelque chose comme Comme décrit dans DICS - Initialement, le pointeur est défini sur Vous êtes maintenant itération de l'objet dans la première boucle qui appelle le 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. P>
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 .ndindex () renvoie: un objet itérateur N-dimensionnel aux tableaux d'index. Code> P>
0th code> index et pour accéder à l'élément suivant __ suivant __ () code> est appelé sur l'itérateur. p>
__ suivant __ () code>, définissant ainsi le pointeur d'index actuel sur le dernier index de l'itérateur. p>
0 p>. p>.