복붙노트

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

PYTHON

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

이것은 Python의 숨겨진 기능에서 나온 것이지만 기능이 어떻게 작동하는지 설명하는 좋은 설명서 나 예제를 볼 수 없습니다.

해결법

  1. ==============================

    1.내장 클래스가 그것을 사용하지 않으므로 자신의 클래스에서 사용하게됩니다.

    내장 클래스가 그것을 사용하지 않으므로 자신의 클래스에서 사용하게됩니다.

    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
    

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

  2. ==============================

    2.줄임표는 고차원 데이터 구조를 조각내는 데 사용됩니다.

    줄임표는 고차원 데이터 구조를 조각내는 데 사용됩니다.

    이 시점에서 다차원 슬라이스를 모든 차원으로 확장하기 위해 많은 전체 조각 (:)을 삽입해야합니다.

    예:

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

    자신의 구현에서 위에서 언급 한 계약을 무시하고 적합하다고 생각되는 모든 것을 위해 자유롭게 사용할 수 있습니다.

  3. ==============================

    3.이것은 줄임표와 관련이없는 줄임표의 또 다른 용도입니다. 큐를 사용하여 스레드 내 통신에서 "완료"신호를 나타내는 표시로 자주 사용합니다. 그곳에 있습니다, 그것은 객체이고, 그것은 싱글 톤이며, 그 이름은 "부족함"을 의미하며, 과도하게 사용 된 None (보통 데이터 흐름의 일부로 큐에 넣을 수 있음)이 아닙니다. YMMV.

    이것은 줄임표와 관련이없는 줄임표의 또 다른 용도입니다. 큐를 사용하여 스레드 내 통신에서 "완료"신호를 나타내는 표시로 자주 사용합니다. 그곳에 있습니다, 그것은 객체이고, 그것은 싱글 톤이며, 그 이름은 "부족함"을 의미하며, 과도하게 사용 된 None (보통 데이터 흐름의 일부로 큐에 넣을 수 있음)이 아닙니다. YMMV.

  4. ==============================

    4.다른 답변에서 언급했듯이 조각 만들기에 사용할 수 있습니다. 많은 전체 조각 표기법 (:)을 작성하고 싶지 않을 때 또는 조작중인 배열의 차원이 무엇인지 확실하지 않은 경우에 유용합니다.

    다른 답변에서 언급했듯이 조각 만들기에 사용할 수 있습니다. 많은 전체 조각 표기법 (:)을 작성하고 싶지 않을 때 또는 조작중인 배열의 차원이 무엇인지 확실하지 않은 경우에 유용합니다.

    강조해야 할 중요한 점은 다른 답변에서 누락 된 점은 채울 차원이 더 이상 없을 때도 사용할 수 있다는 것입니다.

    예:

    >>> 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])
    
  5. from https://stackoverflow.com/questions/118370/how-do-you-use-the-ellipsis-slicing-syntax-in-python by cc-by-sa and MIT license