Python/Numpy

[Numpy] 기본 축의 개념 vs 행렬 연산 시 축의 개념

yeonny_do 2023. 11. 10. 18:08

■ '축'  

 

numpy에서는 다차원 배열의 계산을 간편하게 한다는 큰 장점이 있다. 그런데 행렬을 연산할 때 축의 개념이 본래 알던 축의 개념과는 조금 달라 혼란이 생길 수 있다. 기본적인 행렬의 축의 개념은 아래와 같다.

 

행은 행렬에서 → 방향이므로 행의 축은 0이다. 열은 ↓ 방향이므로 열의 축은 1이다. 

 

하지만, 다차원 행열 계산에 적합한 numpy에서는 모듈 내 함수에서 축을 가리키는 axis라는 옵션이 존재한다. 그런데 axis는 2차원 행렬 연산( 결합이나 변형) 시에, 행 별 계산을 하고자 할 때는 axis=1, 열별 계산을 할 때는 axis=0이라는 옵션을 걸어줘야 한다. 3차원 행렬에서는 깊이의 계산 시에는 axis=0, 열별 계산 시에는 axis=1, 행별 계산 시에는 axis=2라는 옵션을 줘야한다.  이는 기본적으로 생각하고 있는 행렬의 축의 개념과는 다르기 때문에 유념하여 사용해야 한다. 그런데 이 옵션들은 연산시에 적용되고, 연산을 제외한 배열의 구조 변경 등에서는 원래 축의 개념 (행:0, 열:1)대로 생각해야한다. 

 

■ 2차원 행렬의 축 

 

열 계산 시. axis =0

행 계산 시, axis = 1

 

 

■ 3차원 행렬의 축 

 

 

깊이 계산 시, axis = 0

열 계산 시, axis = 1

행 계산 시. axis =2

 

 
import numpy as np

array1 = np.array([[1,2],[3,4]])
print(array1)
print(array1.shape) # 2행 2열

# [[1 2]
#  [3 4]]
# (2, 2)
 

 

 
array2 = np.array([[[1,2,3],
                    [4,5,6]],
                  [[7,8,9],
                  [10,11,12]]])
print(array2)
print(array2.shape) # 2행 3열인 배열이 2개

# [[[ 1  2  3]
#   [ 4  5  6]]

#  [[ 7  8  9]
#   [10 11 12]]]
# (2, 2, 3)
 

 

 
print('2차원 배열의 axis=0 기준 합 : ',end='')
print(np.sum(array1,axis=0))
print('2차원 배열의 axis=1 기준 합 : ',end='')
print(np.sum(array1,axis=1))

# 2차원 배열의 axis=0 기준 합 : [4 6]
# 2차원 배열의 axis=1 기준 합 : [3 7]
 

 

 
print('3차원 배열의 axis=0 기준 합 : ')
print(np.sum(array2,axis=0))

# 3차원 배열의 axis=0 기준 합 :
# [[ 8 10 12]
#  [14 16 18]]
 

 

print('3차원 배열의 axis=1 기준 합 : ')
print(np.sum(array2,axis=1))

# 3차원 배열의 axis=1 기준 합 :
# [[ 5  7  9]
#  [17 19 21]]

 

print('3차원 배열의 axis=2 기준 합 : ')
print(np.sum(array2,axis=2))

# 3차원 배열의 axis=2 기준 합 :
# [[ 6 15]
#  [24 33]]