함수의 인자 axis
파이썬 패키지인 numpy는 1차원 벡터들을 기반으로 2, 3차원 등의 다양한 차원의 기반이 되는 배열(array)를 생성합니다. 그러므로 그들의 모양과 연산에 관련된 함수들의 인수 중에 axis를 포함합니다. 이 인수 axis는 값들이 나열 되는 축의 인덱스를 의미합니다. 즉, 다음의 1차원 벡터를 나타내기 위해서는 1개의 축만이 필요합니다.
np.random.seed(1) x=np.random.randint(0, 10, size=3) print(x)
[5 8 9]
print(f"x의 모양: {x.shape}\nx의 차원: {x.ndim}")
x의 모양: (3,) x의 차원: 1
위 객체 x의 모양은 1개의 숫자로 표현됩니다. 이것은 1개의 축위에 x의 값들을 나열할 수 있음을 나타내는 것으로 축 인덱스는 0만 존재합니다.
인덱스는 0부터 시작하는 음이 아닌 정수입니다. 다음 객체 X는 2차원
다음 객체 X는 2차원으로 모양을 나타내기 위해 2개의 수가 필요합니다. 즉, 두개의 축이 필요함을 의미하는 것으로 축 인덱스는 0과 1이 됩니다.
np.random.seed(1) X=np.random.randint(0, 10, size=(3,4)) print(X)
[[5 8 9 5] [0 0 1 7] [6 9 2 4]]
print(f"X의 모양: {X.shape}\nX의 차원: {X.ndim}")
X의 모양: (3, 4) X의 차원: 2
객체 X의 각 요소의 합을 계산하기 위해 함수 np.sum(객체, axis=None)을 사용합니다. 이 함수의 인수 axis는 축 인덱스를 지정하는 것으로 기본값은 None입니다. 이 경우 축을 무시하고 모든 요소의 합을 나타냅니다.
np.sum(X)
56
axis=0인 경우 객체 X의 축 인덱스 0에서 다른 값들의 합을 계산합니다.
축인덱스: 1 ↓ | ||||||
---|---|---|---|---|---|---|
행/열 인덱스 | 0 | 1 | 2 | 3 | 1 축 합 | |
축인덱스:0 → | 0 | 5 | 8 | 9 | 5 | 19 |
1 | 0 | 0 | 1 | 7 | 10 | |
2 | 6 | 9 | 2 | 4 | 11 | |
0축 합 | 11 | 17 | 12 | 16 | 56 |
- axis=0인 경우 3개의 하위인덱스가 존재하고 다른 인덱스의 값들 합: [5 + 0 + 6, 8 + 0 + 9, 9 + 1 + 2, 5 + 7 + 4]
- axis=1인 경우 4개의 하위인덱스가 존재하고 다른 인덱스의 값들 합: [5 + 0 + 6, 8 + 0 + 9, 9 + 1 + 2, 5 + 7 + 4]
np.sum(X, axis=0)
array([11, 17, 12, 16])
np.sum(X, axis=1)
array([27, 8, 21])
두 배열 객체를 결합하기 위해 np.concatenate((x, y), axis=0)
함수를 적용합니다. 이 함수에서 인수 axis에 의한 차이를 알아봅니다.
np.random.seed(10) Y=np.random.randint(0, 10, size=(3,4)) print(Y)
[[9 4 0 1] [9 0 1 8] [9 0 8 6]]
객체 X와 Y의 모양은 모두 3×4로서 축인덱스 0은 3개의 하위인덱스(행인덱스), 축인덱스 1은 4개의 하위인덱스(열인덱스)를 가집니다. 그러므로 axis=0인 경우 0축에 해당하는 인덱스의 합, axis=1인 경우는 1축에 해당하는 인덱스의 합 결과를 보입니다. 이 관계를 다음과 같이 나타낼 수 있습니다.
\begin{align}\text{axis}&=0\\\text{X.shape}\quad&\;{\color{red}3}\times 4\\ \text{Y.shape}\;\underline{+}&\underline{\;{\color{red}3}\times 4}\\ \text{XY}\quad&\;{\color{red}6}\times 4\\\\ \text{axis}&=1\\\text{X.shape}\quad&\;3\times {\color{red}4}\\ \text{Y.shape}\;\underline{+}&\underline{\;3\times {\color{red}4}}\\ \text{XY}\quad&\;3\times {\color{red}8} \end{align} |
np.concatenate((X, Y), axis=0)
array([[5, 8, 9, 5], [0, 0, 1, 7], [6, 9, 2, 4], [9, 4, 0, 1], [9, 0, 1, 8], [9, 0, 8, 6]])
np.concatenate((X, Y), axis=1)
array([[5, 8, 9, 5, 9, 4, 0, 1], [0, 0, 1, 7, 9, 0, 1, 8], [6, 9, 2, 4, 9, 0, 8, 6]])
댓글
댓글 쓰기