NumPy 배열에 새로운 차원 추가하기
NumPy 배열에 새로운 차원 추가하기
새로운 차원을 추가하는 방법은 여러 가지가 있지만, 가장 일반적으로 사용되는 두 가지 방법은 다음과 같습니다.
np.newaxis 사용하기:
np.newaxis
는 원하는 축에 새로운 차원을 추가하는 데 사용되는 NumPy 함수입니다.
예를 들어, 1차원 배열 arr = [1, 2, 3]
에 새로운 차원을 추가하여 2차원 배열로 만들려면 다음과 같이 np.newaxis
를 사용할 수 있습니다.
new_arr = arr[:, np.newaxis]
print(new_arr.shape) # 출력: (3, 1)
위 코드에서 :
은 원본 배열의 모든 값을 선택하고, np.newaxis
는 새로운 차원을 두 번째 축(열 축)에 추가합니다.
np.expand_dims 사용하기:
np.expand_dims
는 np.newaxis
와 동일한 기능을 수행하는 또 다른 NumPy 함수입니다.
다만, np.expand_dims
는 축 인덱스를 명시적으로 지정할 수 있다는 장점이 있습니다.
new_arr = np.expand_dims(arr, axis=0)
print(new_arr.shape) # 출력: (1, 3)
위 코드에서 axis=0
은 첫 번째 축에 새로운 차원을 추가한다는 것을 의미합니다.
주의 사항:
- 새로운 차원을 추가하면 배열의 모양(shape)이 변경됩니다.
- 원하는 축에 정확히 새로운 차원을 추가해야 합니다. 잘못된 축에 추가하면 예상치 못한 결과가 발생할 수 있습니다.
np.newaxis
와np.expand_dims
는 모두 동일한 기능을 수행하지만, 상황에 따라 적절한 함수를 선택하는 것이 좋습니다.np.expand_dims
는 축 인덱스를 명시적으로 지정할 수 있다는 장점이 있지만,np.newaxis
는 코드가 더 간결하고 읽기 쉽다는 장점이 있습니다.
NumPy 배열에 새로운 차원 추가하기: 예제 코드
예제 1: 1차원 배열에 새로운 차원 추가하기
이 예제에서는 np.newaxis
를 사용하여 1차원 배열에 새로운 차원을 추가합니다.
import numpy as np
# 1차원 배열 생성
arr = np.array([1, 2, 3])
# 새로운 차원을 두 번째 축에 추가
new_arr = arr[:, np.newaxis]
# 결과 출력
print(new_arr)
print(new_arr.shape)
출력:
[[1]
[2]
[3]]
(3, 1)
import numpy as np
# 1차원 배열 생성
arr = np.array([1, 2, 3])
# 새로운 차원을 첫 번째 축에 추가
new_arr = np.expand_dims(arr, axis=0)
# 결과 출력
print(new_arr)
print(new_arr.shape)
[[1 2 3]]
(1, 3)
import numpy as np
# 2차원 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 새로운 차원을 세 번째 축에 추가
new_arr = arr[np.newaxis, :, :]
# 결과 출력
print(new_arr)
print(new_arr.shape)
[[[1 2 3]
[4 5 6]]]
(1, 2, 3)
예제 4: 특정 축에 여러 번 새로운 차원 추가하기
import numpy as np
# 1차원 배열 생성
arr = np.array([1, 2, 3])
# 첫 번째와 세 번째 축에 새로운 차원 추가
new_arr = np.expand_dims(np.expand_dims(arr, axis=0), axis=2)
# 결과 출력
print(new_arr)
print(new_arr.shape)
[[[1 2 3]]]
(1, 1, 3)
이 예제들은 NumPy 배열에 새로운 차원을 추가하는 방법을 보여주는 몇 가지 기본적인 방법입니다.
NumPy 배열에 새로운 차원 추가하기: 대체 방법
하지만 상황에 따라 다음과 같은 대체 방법을 사용할 수도 있습니다.
리스트 내포 사용:
리스트 내포를 사용하여 원하는 차원에 새 값을 포함하는 새 리스트를 만들 수 있습니다.
이 방법은 간단하고 명확하지만, 성능 측면에서 비효율적일 수 있습니다.
import numpy as np
# 1차원 배열 생성
arr = np.array([1, 2, 3])
# 새로운 차원을 두 번째 축에 추가
new_arr = [arr[:, np.newaxis] for _ in range(2)]
# 결과 출력
print(new_arr)
print(np.array(new_arr).shape)
[[[1]
[2]
[3]]]
(2, 3, 1)
np.tile 사용:
np.tile
함수를 사용하여 기존 배열을 반복하여 새로운 차원을 만들 수 있습니다.
이 방법은 리스트 내포보다 효율적이지만, 원하는 결과를 얻기 위해서는 배열을 올바르게 타일링해야 합니다.
import numpy as np
# 1차원 배열 생성
arr = np.array([1, 2, 3])
# 새로운 차원을 두 번째 축에 추가
new_arr = np.tile(arr[:, np.newaxis], (2, 1))
# 결과 출력
print(new_arr)
print(new_arr.shape)
[[[1]
[2]
[3]]]
(2, 3, 1)
broadcasting 사용:
Broadcasting은 두 배열의 크기가 다르더라도 산술 연산을 수행할 수 있도록 하는 NumPy 기능입니다.
특정 축에 1을 포함하는 배열을 만들어 원하는 차원을 추가하는 데 broadcasting을 사용할 수 있습니다.
import numpy as np
# 1차원 배열 생성
arr = np.array([1, 2, 3])
# 새로운 차원을 두 번째 축에 추가
new_arr = arr[:, np.newaxis] + np.zeros((arr.shape[0], 1))
# 결과 출력
print(new_arr)
print(new_arr.shape)
[[1 0]
[2 0]
[3 0]]
(3, 2)
위 코드에서 np.zeros((arr.shape[0], 1))
은 첫 번째 축의 길이와 일치하는 행과 두 번째 축에 1개의 열을 가진 배열을 만듭니다.
'+' 연산자를 사용하여 이 배열을 arr
에 브로드캐스팅하면 원하는 차원이 추가됩니다.
결론
NumPy 배열에 새로운 차원을 추가하는 방법은 여러 가지가 있으며, 상황에 따라 가장 적합한 방법을 선택하는 것이 중요합니다.
빠르고 효율적인 방법을 원한다면 np.newaxis
또는 np.expand_dims
함수를 사용하는 것이 좋습니다.
더 명확하고 이해하기 쉬운 코드를 원한다면 리스트 내포를 사용하는 방법을 고려할 수 있습니다.
python arrays numpy