시작 :
In [326]: x=np.arange(10)
이 두 표현은 같은 일을 - 배열에서 3 개 요소를 선택합니다. 또한 복사본을 반환하는지 확인할 수도 있습니다. 여기에서 x[1:4]
은 뷰를 반환합니다.
In [329]: x[(1,2,3)]
...
IndexError: too many indices for array
과 동일 :
In [330]: x[1,2,3]
IndexError: too many indices for array
x[1,2,3]
는 전화 x.__getitem__((1,2,3))
에 파이썬 인터프리터에 의해 변환된다
In [327]: x[(1,2,3),]
Out[327]: array([1, 2, 3])
In [328]: x[[1,2,3]]
Out[328]: array([1, 2, 3])
그러나 명령없이
는 튜플은 오류를 발생시킵니다. 즉, 입력 값은 튜플 형태로 전달됩니다. 이
x[(1,2,3)]
에 있으면 차이가 없습니다.
In [338]: ((1,2,3))
Out[338]: (1, 2, 3)
In [339]: ((1,2,3),)
Out[339]: ((1, 2, 3),)
x[[1,2,slice(None)]]
가 x[1,2,:]
에 해당하지만, 나는 이것을 확인하는 차원 배열을해야합니다 :하지만 첫 번째 표현식의 쉼표 중첩 레이어를 추가합니다.
In [344]: X=np.arange(64).reshape(4,4,4)
단일 요소의
차원 색인 :
In [345]: X[(1,2,3)]
Out[345]: 27
In [346]: X[1,2,3]
Out[346]: 27
3D, 지난 차원에 슬라이스 :
가
In [347]: X[1,2,:]
Out[347]: array([24, 25, 26, 27])
인터프리터 만 평방 색인 브래킷의 :
표기를 허용합니다
In [348]: X[(1,2,:)]
...
SyntaxError: invalid syntax
그러나 slice
으로 우리는
In [349]: X[(1,2,slice(None))]
Out[349]: array([24, 25, 26, 27])
In [350]: X[[1,2,slice(None)]]
Out[350]: array([24, 25, 26, 27])
튜플 그것이 (1,2,3)
했던 것과 같은 이유가 여기에 작동하는 튜플 또는 목록으로 그것을 쓸 수 있습니다. 나는 그것이 단지 의미가있는 유일한 것이기 때문에 단순히 같은 방법으로 []
사례를 다루고 있다고 생각합니다. 슬라이스와 숫자를 결합하여 고급 색인을 만드는 것은 이치에 맞지 않습니다.
이 날이 개 항목 플러스 슬라이스 선택할 수 있도록하는 색인 트릭 :
In [354]: x[np.r_[1,3, 6:10]]
Out[354]: array([1, 3, 6, 7, 8, 9])
는하지만 실제로 범위
In [353]: np.r_[1,3, 6:10]
Out[353]: array([1, 3, 6, 7, 8, 9])
에 슬라이스를 확대하고있다