Pergunta

Este surgiu em Invisível recursos do Python , mas eu não posso ver uma boa documentação ou exemplos que explicam como funciona o recurso.

Foi útil?

Solução

Você iria usá-lo em sua própria classe, uma vez que nenhuma classe embutido faz uso dela.

Numpy usa, como indicado na documentação . Alguns exemplos aqui .

Em sua própria classe, você usá-lo como este:

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

É claro, há a python documentação , e referência . Mas esses não são muito úteis.

Outras dicas

A elipse é usado para cortar estruturas de dados de dimensões superiores.

Ele foi projetado para média neste momento, inserir as fatias completas (:) para estender a fatia multi-dimensional para todas as dimensões .

Exemplo :

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

Agora, você tem uma matriz 4-dimensional de 2x2x2x2 ordem. Para selecionar todos os primeiros elementos da 4ª dimensão, você pode usar as reticências notação

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

o que equivale a

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

Em suas próprias implementações, você está livre para ignorar o contrato mencionado acima e usá-lo para o que você vê o ajuste.

Este é um outro uso para Reticências, que nada tem a ver com fatias: muitas vezes eu usá-lo na comunicação intra-thread com filas, como uma marca que os sinais de "Concluído"; é lá, é um objecto, que é uma Singleton, e os seus meios de nome de "falta de", e não é a em demasia Nenhum (o que poderia ser colocado numa fila, como parte dos dados normais de fluxo). YMMV.

Como afirmado em outras respostas, ele pode ser usado para a criação de fatias. Útil quando você não quer escrever muitos fatias anotações completas (:), ou quando você está só não tenho certeza sobre o que é dimensionalidade da matriz que está sendo manipulado.

O que eu pensei importante destacar, e que estava faltando nas outras respostas, é que ele pode ser usado mesmo quando não há mais dimensões a serem preenchidos.

Exemplo:

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

Isso resultará em erro:

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

Este trabalho:

a[...,0,:]
array([0, 1])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top