Como você usa a sintaxe corte reticências em Python?
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.
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 .
>>> 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])