Python NumPy에서 np.newaxis 사용법
np.newaxis란 무엇인가?
np.newaxis는 None과 동일하지만 의미적으로 더 명확합니다. 새로운 차원을 삽입할 위치를 명확하게 표시하여 코드를 더욱 이해하기 쉽게 만들어줍니다.
np.newaxis 사용 예시
배열에 차원 추가하기
import numpy as np
# 1차원 배열
arr = np.array([1, 2, 3])
# np.newaxis를 사용하여 2차원 배열로 변환
arr_newaxis = arr[np.newaxis, :]
print(arr.shape) # (3,)
print(arr_newaxis.shape) # (1, 3)
브로드캐스팅 활용하기
# 2차원 배열
arr2 = np.array([[1, 2], [3, 4]])
# 1차원 배열을 2차원 배열에 브로드캐스팅
broadcasted_arr = arr2 + arr[np.newaxis, :]
print(broadcasted_arr)
# [[2 3]
# [4 5]]
행렬 곱셈
# 2차원 배열
mat1 = np.array([[1, 2], [3, 4]])
# 벡터 (1차원 배열)
vec = np.array([5, 6])
# 벡터를 행렬에 곱하기 위해 np.newaxis 사용
result = mat1 @ vec[np.newaxis, :]
print(result)
# [[17 22]
# [37 42]]
np.newaxis 사용 시 주의 사항
- np.newaxis는 새로운 차원을 추가하기 때문에 메모리 사용량이 증가할 수 있습니다.
- 코드를 읽기 어렵게 만들 수 있으므로 과도하게 사용하지 않도록 주의해야 합니다.
더 알아보기
예제 코드
배열에 차원 추가하기
import numpy as np
# 1차원 배열
arr = np.array([1, 2, 3])
# np.newaxis를 사용하여 2차원 배열로 변환
arr_newaxis = arr[np.newaxis, :]
print(f"arr 형태: {arr.shape}")
print(f"arr_newaxis 형태: {arr_newaxis.shape}")
브로드캐스팅 활용하기
# 2차원 배열
arr2 = np.array([[1, 2], [3, 4]])
# 1차원 배열을 2차원 배열에 브로드캐스팅
broadcasted_arr = arr2 + arr[np.newaxis, :]
print(broadcasted_arr)
행렬 곱셈
# 2차원 배열
mat1 = np.array([[1, 2], [3, 4]])
# 벡터 (1차원 배열)
vec = np.array([5, 6])
# 벡터를 행렬에 곱하기 위해 np.newaxis 사용
result = mat1 @ vec[np.newaxis, :]
print(result)
다른 예시
- 1차원 배열을 3차원 배열로 변환:
arr3d = arr[np.newaxis, :, np.newaxis]
- 2차원 배열의 특정 열에 1을 더하기:
arr2[:, 1] += 1
# 또는
arr2 += np.array([0, 1, 0])[np.newaxis, :]
주의 사항
np.newaxis 대체 방법
None 사용:
arr_newaxis = arr[None, :]
reshape 사용:
arr_newaxis = arr.reshape(1, -1)
슬라이싱 사용:
arr_newaxis = arr[np.arange(1), :]
각 방법의 장단점
방법 | 장점 | 단점 |
---|---|---|
None | 간결하고 명확 | 의미가 모호할 수 있음 |
reshape | 명확하고 유연 | 코드가 더 길어짐 |
슬라이싱 | 명확하고 효율적 | 코드가 더 복잡해짐 |
선택 가이드
- 코드 간결성을 중요시한다면
None
을 사용합니다. - 명확성과 유연성을 중요시한다면
reshape
를 사용합니다. - 효율성을 중요시한다면 슬라이싱을 사용합니다.
참고:
- np.newaxis는 NumPy에서만 사용할 수 있는 특수 상수입니다. 다른 라이브러리에서는 사용할 수 없습니다.
- np.newaxis 대신 다른 방법을 사용하더라도 기능은 동일합니다.
추가 정보
python numpy multidimensional-array