이것은 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])
자체 구현에서는 위에서 언급 한 계약을 무시하고 원하는대로 사용할 수 있습니다.
a[:,:,:,0]
사본을 반환하고 사본 이 아닌 a[...,0]
"보기"를 반환하는 것이 아닌가? 나는 id()
버전과 3 차원 배열 모두에 대해 실행하려고 시도했습니다 . a[:,:,:, 0], a[:,:,:, 1], a[:,:,:, 2]
모두 다른 ID를 가지고 있지만 a[..., 0], a[..., 1], a[..., 2]
모두 동일한 ID를 가지고 있습니다.
id()
는 둘 다에 대해 동일한 값을 반환합니다. 또한 확인 __array_interface__['data']
하면 동일한 메모리 주소가 표시됩니다.
a[indexes, ...]
1 차원 배열 인 동안에도 사용할 수 있습니다 !
이것은 슬라이스와 관련이없는 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])