질문과 예제는 Wes McKinney의 Python for Data Analysis 책에서 비롯된 것 같습니다 . 이 기능은 4.1 장에transpose
언급되어 있습니다. 배열 전치 및 축 교환 .
더 높은 차원의 배열의 transpose
경우 축을 순회하기 위해 축 번호의 튜플을 허용합니다 (추가적인 마음 굽힘을 위해).
여기서 "permute"는 "재정렬"을 의미하므로 축 순서를 다시 정렬합니다.
의 숫자 .transpose(1, 0, 2)
는 원본과 비교하여 축의 순서가 변경되는 방식 을 결정합니다. 를 사용하는 .transpose(1, 0, 2)
것은 "첫 번째 도끼를 두 번째 도끼로 바꾸십시오."라는 의미입니다. 를 사용 .transpose(0, 1, 2)
하면 변경할 것이 없기 때문에 배열이 동일하게 유지됩니다. 기본 순서입니다.
(2, 2, 4)
크기 배열이 있는 책의 예는 첫 번째와 두 번째 축의 크기가 동일하기 때문에 명확하지 않습니다. 따라서 최종 결과는 행 arr[0, 1]
및 arr[1, 0]
.
각 차원이 다른 크기를 갖는 3 차원 배열로 다른 예제를 시도하면 재배치 부분이 더 명확 해집니다.
In [2]: x = np.arange(24).reshape(2, 3, 4)
In [3]: x
Out[3]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [4]: x.transpose(1, 0, 2)
Out[4]:
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],
[[ 4, 5, 6, 7],
[16, 17, 18, 19]],
[[ 8, 9, 10, 11],
[20, 21, 22, 23]]])
여기에서 원래 배열 크기는 (2, 3, 4)
. 우리는 1 일과 2 일을 변경 했으므로 (3, 2, 4)
크기가됩니다. 재배치가 정확히 어떻게 일어 났는지 자세히 살펴보면; 숫자 배열이 특정 패턴으로 변경된 것 같습니다. @ RobertB 의 종이 비유를 사용하여 두 개의 숫자 청크를 시트에 쓰고 각 시트에서 하나의 행을 가져와 배열의 한 차원을 구성하면 이제 3x2x4 크기의 배열이됩니다. , 가장 바깥 쪽에서 가장 안쪽 레이어까지 계산합니다.
[ 0, 1, 2, 3] \ [12, 13, 14, 15]
[ 4, 5, 6, 7] \ [16, 17, 18, 19]
[ 8, 9, 10, 11] \ [20, 21, 22, 23]
다른 크기의 배열로 플레이하고 작동 방식에 대한 더 나은 직관을 얻기 위해 다른 축을 변경하는 것이 좋습니다.