[python] 파이썬에서 줄임표 슬라이싱 구문을 어떻게 사용합니까?

이것은 Python의 숨겨진 기능 에서 나타 났지만 기능의 작동 방식을 설명하는 좋은 문서 나 예제를 볼 수 없습니다.



답변

Ellipsis...숨겨진 기능이 아니 거나 상수 일뿐입니다. 언어 구문의 일부인 Javascript ES6과는 상당히 다릅니다. 내장 클래스 나 파이썬 언어 구성 요소가이를 사용하지 않습니다.

따라서 그 구문은 전적으로 귀하 또는 다른 사람이 코드를 이해하는 데 달려 있습니다.

Numpy는 문서에 명시된대로이를 사용합니다 . 여기 몇 가지 예가 있습니다 .

자신의 수업에서 다음과 같이 사용합니다.

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

물론 파이썬 문서언어 참조가 있습니다. 그러나 그다지 도움이되지 않습니다.


답변

줄임표는 높은 차원의 데이터 구조를 슬라이스하기 위해 숫자로 사용됩니다.

이 시점에서 :다차원 슬라이스를 모든 차원으로 확장하기 위해 전체 슬라이스 ( )를 많이 삽입 하도록 설계되었습니다 .

:

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

이제 2x2x2x2 차수의 4 차원 행렬이 있습니다. 4 차원에서 첫 번째 요소를 모두 선택하려면 줄임표 표기법을 사용할 수 있습니다.

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

어느 것이

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

자체 구현에서는 위에서 언급 한 계약을 무시하고 원하는대로 사용할 수 있습니다.


답변

이것은 슬라이스와 관련이없는 Ellipsis의 또 다른 용도입니다. 필자는 종종 큐와의 스레드 내 통신에서이를 “완료”신호로 사용합니다. 거기에 있고, 객체이고, 싱글 톤이며, 그 이름은 “없음”을 의미하며, 과도하게 사용 된 없음 (일반적인 데이터 흐름의 일부로 대기열에 넣을 수 있음)이 아닙니다. YMMV.


답변

다른 답변에서 언급했듯이 슬라이스를 만드는 데 사용할 수 있습니다. 많은 전체 슬라이스 표기법 ( :) 을 쓰지 않으려 는 경우 또는 조작 할 배열의 차원이 무엇인지 확실하지 않은 경우에 유용합니다.

강조해야한다고 생각하고 다른 답변에서 누락 된 것은 채울 치수가 더 이상 없을 때도 사용할 수 있다는 것입니다.

예:

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

오류가 발생합니다.

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

이것은 작동합니다 :

a[...,0,:]
array([0, 1])


답변