넘파이 newaxis
넘파이 newaxis는 넘파이 배열에 새로운 축(차원)을 추가하는 데 사용되는 데 사용되는 인덱싱 객체이다. 이는 배열의 차원을 늘리거나 형태를 변경하는 데 유용하다. 일반적으로 배열 슬라이싱에서 사용되며, 슬라이싱 결과에 새로운 축을 추가하려고 할 때 사용된다.
import numpy as np
# 1차원 배열
arr = np.array([1, 2, 3, 4])
# newaxis를 사용하여 1차원 배열을 2차원 배열로 변경
arr_2d = arr[:, np.newaxis]
print(arr_2d)
위의 예제 코드는 arr 배열이 세로 방향으로 새로운 축이 추가된 2차원 배열이 된다. newaxis는 배열의 차원을 조작하고 브로드캐스팅(Broadcasting)과 같은 작업을 수행할 때 유용하다.
- : - 이 부분은 배열을 슬라이싱 한다. 여기서는 모든 행을 선택한다.
- np.newaixs - 새로운 축(차원)을 추가한다.
결과적으로 arr[:, np.newaxis]는 원래 1차원 배열을 열 벡터로 표현한 2차원 배열을 생성한다. 새로운 축이 열 방향으로 추가되었기 때문에 열 벡터로 간주할 수 있다.
[[1]
[2]
[3]
[4]]
실행 결과
2차원 배열을 3차원 배열로 변경
import numpy as np
# 2차원 배열 생성
arr_2d = np.array([[1, 2, 3],
[4, 5, 6]])
# arr_2d를 3차원 배열로 변경
arr_3d = arr_2d[:, :, np.newaxis]
# 결과 출력
print("Original 2D Array")
print(arr_2d)
print("\nConverted 3D Array")
print(arr_3d)
arr_2d[: , :, np.newaxis]를 사용하여 2차원 배열 arr_2d를 3차원 배열 arr_3d로 변경한다.
Original 2D Array
[[1 2 3]
[4 5 6]]
Converted 3D Array
[[[1]
[2]
[3]]
[[4]
[5]
[6]]]
실행 환경
이렇게 각 행렬이 새로운 차원에 배치되어 3차원 배열이 생성된다. 이러한 변환은 데이터의 차원을 조작하거나 머신러닝에서 데이터를 처리할 때 유용할 수 있다.
다차원 배열에서 차원 추가
import numpy as np
# 2차원 배열
arr_2d = np.array([[1, 2, 3],
[4, 5, 6]])
# 2차원 배열에 새로운 차원 추가
arr_3d = arr_2d[:, :, np.newaxis]
print("Original 2D Array")
print(arr_2d)
print("\nConverted 3D Array")
print(arr_3d)
위의 예제 코드에서는 2차원 배열에 새로운 차원을 추가하여 3차원 배열로 변환하는 코드이다. 리스트 슬라이싱을 통해 1차원, 2차원 배열의 원소까지 가져온 후 3차원 위치에 np.newaxis를 사용하여 3차원 배열로 변환한다.
Original 2D Array
[[1 2 3]
[4 5 6]]
Converted 3D Array
[[[1]
[2]
[3]]
[[4]
[5]
[6]]]
실행 결과
벡터를 열 벡터 또는 행 벡터로 변환
import numpy as np
# 1차원 배열 (벡터)
arr = np.array([1, 2, 3])
# 열 벡터로 변환
arr_column = arr[:, np.newaxis]
# 행 벡터로 변환
arr_row = arr[np.newaxis, :]
print("Original Array")
print(arr)
print("\nColumn Vector")
print(arr_column)
print("\nRow Vector")
print(arr_row)
2차원 배열은 [행:열]과 같은 형식으로 이루어져 있다.
- Original Array는 원래 1차원 배열이다.
- Column Vector는 원래 배열을 열 벡터로 변환한 것이다. arr[:, np.newaxis]는 arr의 행을 1차원 벡터로 변환([1], [2], [3])한 다음, 이를 arr의 열로 추가한다. 이렇게 하면 arr의 행은 그대로 유지되고, 열이 하나 추가되어 열 벡터가 된다.
- Row Vector는 원래 배열을 행 벡터로 변환한 것이다. arr[np.newaxis, :]는 arr의 열을 1차원 벡터로 변환([1,2,3])한 다음, 이를 arr의 행으로 추가한다. 이렇게 하면 arr의 열은 그대로 유지되고, 행이 하나 추가되어 행 벡터가 된다.
Tip
1차원 벡터로 변환한다는 것은, 배열의 차원을 1차원으로 줄이는 것을 의미한다.
Original Array
[1 2 3]
Column Vector
[[1]
[2]
[3]]
Row Vector
[[1 2 3]]
실행 결과