Question

Cela est arrivé dans Fonctionnalités cachées de Python , mais je ne vois pas de bonne documentation. ou des exemples expliquant le fonctionnement de cette fonctionnalité.

Était-ce utile?

La solution

Vous l'utiliseriez dans votre propre classe, car aucune classe intégrée ne l'utilise.

Numpy l'utilise, comme indiqué dans la documentation . Quelques exemples ici .

Dans votre propre classe, vous l'utiliseriez comme ceci:

>>> class TestEllipsis(object):
...     def __getitem__(self, item):
...         if item is Ellipsis:
...             return "Returning all items"
...         else:
...             return "return %r items" % item
... 
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items

Bien sûr, il existe la documentation python , et référence de langue . Mais ceux-ci ne sont pas très utiles.

Autres conseils

Les points de suspension sont utilisés pour découper des structures de données de dimension supérieure.

Cela signifie que insérez autant de tranches complètes (: ) pour étendre la tranche multidimensionnelle à toutes les dimensions .

Exemple :

>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)

Maintenant, vous avez une matrice à 4 dimensions d'ordre 2x2x2x2. Pour sélectionner tous les premiers éléments de la 4ème dimension, vous pouvez utiliser la notation des points de suspension

>>> a[..., 0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

qui est équivalent à

>>> a[:,:,:,0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

Dans vos propres implémentations, vous êtes libre d'ignorer le contrat mentionné ci-dessus et de l'utiliser comme bon vous semble.

C’est une autre utilisation de Ellipsis, qui n’a rien à voir avec les tranches: je l’utilise souvent dans la communication intra-thread avec des files d’attente, en tant que marque signalant "Done"; c'est là, c'est un objet, c'est un singleton, et son nom signifie "manque de", et ce n'est pas le néant surutilisé (qui pourrait être mis en file d'attente dans le cadre d'un flux de données normal). YMMV.

Comme indiqué dans d'autres réponses, il peut être utilisé pour créer des tranches. Utile lorsque vous ne souhaitez pas écrire beaucoup de notations de tranches complètes (: ) ou que vous ne savez pas exactement quelle est la dimensionnalité du tableau en cours de manipulation.

Ce que j’ai jugé important de souligner, et qui manquait dans les autres réponses, est qu’il peut être utilisé même s’il n’ya plus de dimensions à remplir.

Exemple:

>>> from numpy import arange
>>> a = arange(4).reshape(2,2)

Cela entraînera une erreur:

>>> a[:,0,:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

Cela fonctionnera:

a[...,0,:]
array([0, 1])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top