Domanda

Questo è emerso in Funzionalità nascoste di Python , ma non riesco a vedere una buona documentazione o esempi che spiegano come funziona la funzione.

È stato utile?

Soluzione

Lo useresti nella tua classe, dal momento che nessuna classe integrata la usa.

Numpy lo utilizza, come indicato nella documentazione . Alcuni esempi qui .

Nella tua classe, lo useresti in questo modo:

>>> 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

Naturalmente, c'è la documentazione python , e riferimento linguistico . Ma quelli non sono molto utili.

Altri suggerimenti

I puntini di sospensione vengono utilizzati per tagliare strutture di dati di dimensioni superiori.

È progettato per significare a questo punto, inserire il maggior numero di sezioni complete (: ) per estendere la sezione multidimensionale a tutte le dimensioni .

Esempio :

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

Ora hai una matrice quadridimensionale di ordine 2x2x2x2. Per selezionare tutti i primi elementi nella 4a dimensione, puoi usare la notazione con i puntini di sospensione

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

che equivale a

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

Nelle tue implementazioni, sei libero di ignorare il contratto sopra menzionato e usarlo per quello che ritieni opportuno.

Questo è un altro uso di Ellipsis, che non ha nulla a che fare con le sezioni: lo uso spesso nella comunicazione intra-thread con le code, come un segno che segnala "Fatto"; è lì, è un oggetto, è un singleton, e il suo nome significa "mancanza di", e non è il None abusato (che potrebbe essere inserito in una coda come parte del normale flusso di dati). YMMV.

Come indicato in altre risposte, può essere utilizzato per creare sezioni. Utile quando non si desidera scrivere molte notazioni complete (: ) o quando non si è sicuri su quale sia la dimensione dell'array manipolata.

Quello che ho ritenuto importante evidenziare, e che mancava nelle altre risposte, è che può essere utilizzato anche quando non ci sono più dimensioni da riempire.

Esempio:

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

Ciò comporterà un errore:

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

Funzionerà:

a[...,0,:]
array([0, 1])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top