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 de
l code> donc
La code> a maintenant le même objet itérateur qui dans
l code> . Mais
l 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 sur
l 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>.