넘파이 swapaxes() 함수
swapaxes() 함수는 배열의 두 축을 서로 교환하여 새로운 배열을 반환하는 NumPy 함수이다. 이 함수는 주어진 두 축의 인덱스를 기반으로 배열의 차원을 교환한다. 이를 통해 배열의 모양을 변경할 수 있다.
예를 들어, 2차원 배열에서 swapaxes() 함수를 사용하면 행과 열을 서로 교환할 수 있다. 이를 통해 배열의 모양이 변경된다. 함수의 사용은 아래와 같다.
import numpy as np
# 2차원 배열 생성
arr_2d = np.array([[1, 2, 3],
[4, 5, 6]])
# 행과 열 교환
result_arr = arr_2d.swapaxes(0, 1)
print("Original 2D Array")
print(arr_2d)
print("\nSwapped Axes 2D Array")
print(result_arr)
위의 예제에서 swapaxes(0,1)은 첫 번째 축(행)과 두 번째 축(열)을 교환한다. 결과적으로 배열의 모양이 변하게 된다.
Original 2D Array
[[1 2 3]
[4 5 6]]
Swapped Axes 2D Array
[[1 4]
[2 5]
[3 6]]
실행 결과
결과적으로 swapaxes() 함수는 두 축을 교환하기 위해 사용되는 함수이다. 하지만 축을 교환하는 함수로 transpose() 함수 또한 있다. 그렇다면 두 함수의 차이점은 어떤 게 있을까?
- 축의 순서 지정
- transpose() 함수는 축의 순서를 사용자가 직접 지정하여 변경할 수 있다. 예를 들어, 2차원 배열의 경우 transpose()를 호출할 때 순서를 지정하지 않으면 자동으로 행과 열이 바뀐다.
- swapaxes() 함수는 두 개의 축을 직접 지정하여 교환한다.(파라미터 2개까지만 받을 수 있다.)
- 다차원 배열에서의 활용
- transpose() 함수는 다차원 배열에서 유연하게 동작한다. 축의 순서를 변경할 때는 transpose()를 사용하는 편이 편리하다.
- swapaxes() 함수는 주로 2차원 배열이나 특정한 축을 직접 교환할 때 사용한다. swapaxes() 함수는 파라미터를 2개까지 받을 수 있으므로 3차원 이상의 배열에서부터는 순차적으로 변경해줘야 한다.
- 파라미터 개수
- transpose() 함수는 축의 순서를 지정하는 데에도 하나의 튜플 혹은 파라미터의 개수 제한이 없다.(n차원 가능)
- swapaxes() 함수는 두 개의 축을 직접 지정하는 데에 두 개의 파라미터를 사용한다.(튜플이나 리스트로는 불가)
종합적으로, 두 함수는 배열의 차원 조작에 있어 다양한 상황에서 사용될 수 있으며, 사용자의 목적과 상황에 따라 선택하여 활용할 수 있다.
다음은 swapaxes() 함수를 사용하여 3차원 배열의 모든 축을 변경하는 예제를 살펴보자, 물론 3차원 이상의 배열의 축을 변경할 경우 transpose() 함수가 더 편리하겠지만 swapaxes() 함수로도 어떻게 사용하는지 한 번 살펴보자.
import numpy as np
# 3차원 배열 생성
arr_3d = np.array([[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]],
[[13, 14, 15], [16, 17, 18]]])
# 모든 축 교환
swapped_arr_3d = arr_3d.swapaxes(0, 1).swapaxes(0, 2).swapaxes(1, 2)
# 결과 출력
print("Original 3D Array")
print(arr_3d)
print("\nSwapped 3D Array")
print(swapped_arr_3d)
위의 예제 코드에서는 swapaxes() 함수를 여러 번 사용하여 모든 축을 교환한다. 코드에서는 0번째 축과 1번째 축을 교환한 후, 0번째 축과 2번째 축을 교환하고, 마지막으로 1번째 축과 2번째 축을 교환한다. 결과적으로 모든 축의 순서가 변경된 것을 확인할 수 있다.
Original 3D Array
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]
[[13 14 15]
[16 17 18]]]
Swapped 3D Array
[[[ 1 7 13]
[ 4 10 16]]
[[ 2 8 14]
[ 5 11 17]]
[[ 3 9 15]
[ 6 12 18]]]
실행 결과
결론으로, swapaxes() 함수는 두 축을 직접 지정하여 교환하는 간단한 작업에 유리하다. 하지만 n차원(n > 2) 배열에서는 순차적으로 축을 변경하는 것이 번거로울 수 있다. transpose() 함수는 축의 순서를 사용자가 직접 지정하여 변경할 수 있어 더 유연하게 다차원 배열의 구조를 조작할 수 있다. 따라서 n차원(n > 2) 배열의 경우에는 transpose() 함수를 활용하는 것이 더 효율적이다.
읽어주셔서 감사합니다.