Python에서 줄임표 슬라이싱 구문을 어떻게 사용합니까?
문제
이게 나왔는데 파이썬의 숨겨진 기능, 하지만 기능 작동 방식을 설명하는 좋은 문서나 예제를 볼 수 없습니다.
해결책
내장 클래스에서는 이를 사용하지 않으므로 자신의 클래스에서 사용합니다.
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의 또 다른 용도입니다.나는 대기열과의 스레드 내 통신에서 "완료"를 나타내는 표시로 자주 사용합니다.그것은 거기에 있고, 객체이고, 싱글톤이고, 그 이름은 "부족함"을 의미하며, 과도하게 사용되는 None(일반적인 데이터 흐름의 일부로 대기열에 넣을 수 있음)이 아닙니다.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])