이수안컴퓨터연구소의 NumPy 한번에 끝내기 영상을 보고 정리한 내용입니다.
✅ 배열 전치와 축 변경
✔️numpy.ndarray.T
선형대수학에서 전치행렬은 행과 열을 교환하여 얻는 행렬이다.
즉, 주대각선을 기준으로 행렬을 뒤집은 것과 같다.
NumPy에서 전치행렬은 ndarray.T 혹은 ndarray.transpose()로 얻을 수 있다.
(ndarray.T가 self.transpose()와 같다.)
print(a2)
print(a2.T)
# output
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# [[1 4 7]
# [2 5 8]
# [3 6 9]]
a2.T를 출력하자 주 대각선을 기준으로 전치된 행렬이 출력된 것을 확인할 수 있다.
이는 np.transpose(a2)와 a2.transpose()의 결과와 동일하다.
print(a3)
print(a3.T)
# output
# [[[1 2 3]
# [4 5 6]
# [7 8 9]]
#
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
#
# [[1 2 3]
# [4 5 6]
# [7 8 9]]]
# [[[1 1 1]
# [4 4 4]
# [7 7 7]]
#
# [[2 2 2]
# [5 5 5]
# [8 8 8]]
#
# [[3 3 3]
# [6 6 6]
# [9 9 9]]]
✔️ numpy.swapaxes()
배열의 두 축을 교환한다.
numpy.swapaxes(a, axis1, axis2)
- a : 축을 교환할 배열.
- axis1 : 정수. 교환할 첫 번째 축.
- axis2 : 정수. 교환할 두 번째 축.
print(a2)
print(a2.swapaxes(1, 0))
# output
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# [[1 4 7]
# [2 5 8]
# [3 6 9]]
print(a3)
print(a3.swapaxes(0,1))
print(a3.swapaxes(1,2))
# output
# [[[1 2 3]
# [4 5 6]
# [7 8 9]]
#
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
#
# [[1 2 3]
# [4 5 6]
# [7 8 9]]]
# [[[1 2 3]
# [1 2 3]
# [1 2 3]]
# [[4 5 6]
# [4 5 6]
# [4 5 6]]
#
# [[7 8 9]
# [7 8 9]
# [7 8 9]]]
# [[[1 4 7]
# [2 5 8]
# [3 6 9]]
#
# [[1 4 7]
# [2 5 8]
# [3 6 9]]
#
# [[1 4 7]
# [2 5 8]
# [3 6 9]]]
✅ 배열 재구조화
✔️ numpy.reshape()
값의 변경 없이 배열의 형상을 변경한다.
numpy.reshape(a, newshape, order='C')
- a : array_like. 형상을 변경할 배열.
- newshape : 정수 혹은 정수의 튜플. 변경할 형상.
n1 = np.arange(1, 10)
print(n1)
print(n1.reshape(3, 3))
# output
# [1 2 3 4 5 6 7 8 9]
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
numpy.arange를 이용해 1부터 9까지의 값을 가지는 1차원 배열인 n1을 만들었다.
numpy.reshape() 메서드로 n1을 3x3의 2차원 배열로 형변환을 시키면 값은 그대로 1부터 9까지의 수를 가진 3x3의 2차원 배열 형태가 된 것을 확인할 수 있다.
✔️ numpy.newaxis
배열에 새로운 축을 추가한다.
print(n1)
print(n1[np.newaxis, :5])
print(n1[:5, np.newaxis])
# output
# [1 2 3 4 5 6 7 8 9]
# [[1 2 3 4 5]]
# [[1]
# [2]
# [3]
# [4]
# [5]]
row에 np.newaxis를 적용했을 때와 column에 np.newaxis를 적용했을 때의 결과가 다른 것을 확인할 수 있다.
✅ 배열 크기 변경
✔️ numpy.resize()
배열의 형상을 변경하거나 배열의 크기를 변경한다.
변경할 형상의 사이즈와 원본 배열의 사이즈가 같을 경우에는 배열의 형상만 변경된다.
변경할 형상의 사이즈가 원본 배열의 사이즈보다 큰 경우에는 배열의 크기가 증가하며 남은 공간이 0으로 채워진다.
반대의 경우 배열의 크기가 감소하며 포함되지 않은 값은 삭제된다.
numpy.resize(a, new_shape)
- a : array_like. 사이즈를 조절할 배열.
- new_shape : 변경할 사이즈
n2 = np.random.randint(0, 10, (2, 3))
print(n2)
n2.resize((3, 2))
print(n2)
n2.resize((5, 5))
print(n2)
n2.resize((2,2))
print(n2)
# output
# [[8 8 5]
# [1 8 8]]
# [[8 8]
# [5 1]
# [8 8]]
# [[8 8 5 1 8]
# [8 0 0 0 0]
# [0 0 0 0 0]
# [0 0 0 0 0]
# [0 0 0 0 0]]
# [[8 8]
# [5 1]]
0부터 9의 랜덤한 정수값을 가지는 2x3의 2차원 배열 n2를 생성했다.
n2를 동일한 사이즈의 3x2 배열로 크기를 변경하면 값의 누락 없이 3x2의 배열로 변경된 것을 볼 수 있다.
n2를 기존 2x3의 사이즈보다 큰 5x5의 형상으로 변경하면 남는 공간이 모두 0으로 채워진 5x5의 배열이 된다.
마지막으로 이를 2x2의 형상으로 크기를 변경하면 앞에서부터 차례로 4개의 요소만이 배열에 저장되고 나머지 값은 삭제됐다.
🔍 참조
전치행렬 https://ko.wikipedia.org/wiki/%EC%A0%84%EC%B9%98%ED%96%89%EB%A0%AC
Array manipulation routines https://numpy.org/doc/stable/reference/routines.array-manipulation.html
numpy.newaxis https://numpy.org/doc/stable/reference/constants.html
numpy.resize https://numpy.org/doc/stable/reference/generated/numpy.resize.html
'Python > NumPy' 카테고리의 다른 글
[NumPy] 배열 연산 - (1) (0) | 2022.02.05 |
---|---|
[NumPy] 배열 변환 - (2) (0) | 2022.02.02 |
[NumPy] 배열 값 삽입/수정/삭제/복사 (0) | 2022.01.24 |
[NumPy] 인덱싱과 슬라이싱 (0) | 2022.01.23 |
[NumPy] 배열 생성 - (2) (0) | 2022.01.23 |
댓글