2016-06-21 4 views
3

난 그냥 확실히 이해하지 않는 NumPy와 인덱스 동작을 통해 발견했다. numpy가 색인 스키마에 따라 내 축의 순서를 변경하는 것 같습니다. 불행히도 설명서에서 다음에 대한 설명을 찾을 수 없습니다. 누군가 무슨 일이 일어나는지 나에게 설명해 줄 수 있니?NumPy와 색인의 순서를 재 배열

# This is expected: dimension 1 is reduced to length 1: 
print np.ndarray(shape=(3,3,3,3))[:, [0], :, :].shape 
>>> (3, 1, 3, 3) 

# This is the unexpected behavior: 
print np.ndarray(shape=(3,3,3,3))[:, [0], :, 0].shape 
>>> (1, 3, 3) 

나는 두 번째 명령이 (3, 1, 3)을 얻을 것으로 기대한다. 먼저 요소를 선택하면 처음 두 차원의 모양이 바뀌는 이유는 무엇입니까? 미리 감사드립니다.

편집 : 내가 파이썬 2.7.11

+1

불분명하지만,이 문제는 [문서화 (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#combining-advanced-and-basic-indexing). –

답변

4

이 예상되는 행동을 NumPy와 1.11.0에서이보기 ... NumPy와 슬라이스와 다르게 배열 인덱스 축에 인덱스 축 처리합니다. 기본 동작은 결과 모양에 결과로 나타나는 축의 모양이 배열로 인덱싱 된 결과로 축의 결과 모양이 조각으로 인덱싱됩니다. 어느 하나의 홀수 아웃 제 경우 즉 (1, 3, 3, 3)을 했어야 인 것을 의미한다. 그러나 누군가는 당신과 같은 몇 가지 간단한 경우에 사용자를 혼란 것이라고 생각, 그래서 배열 인덱스 모든 축이 함께 그룹화 할 때, 그 결과 모양은 배열 인덱스 축 클러스터가 있었다 출력 형태의 위치에 배치됩니다 원래 배열.

당신은 스스로를 테스트 할 수

당신이 경험 한 것처럼
>>> print np.ndarray(shape=(3,3,3,3))[:, [0], [0], :].shape 
(3, 1, 3) 

이 영리함은 아마 더 혼란 일관된 행동보다. NumPy와 개발자들 사이 합의는 다른 클러스터 배열 인덱스 축으로 취급하지 더 좋을 것이며,이 말짱 색인을 허용 할 a PR implementing indexer attributes도있다. 그것은 너무 먼 미래의 어떤 경우에 사용 중단 경고를 발행 시작할 수 있지만

은 이전 버전과의 호환성을 위해 기본 색인, 조만간 시간을 변경하지 않을 것입니다.