[Python] NumPy 배열 변환
- 파이썬(Python)
- 2022. 2. 18. 19:48
참조
배열 전치 및 축 변경
import numpy as np
# 1차원
a1 = np.array([1,2,3,4,5])
# 2차원
a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 3차원
a3 = np.array([ [ [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] ] ])
print(a2)
print(a2.T) # 배열 전치
print(a3)
print(a3.T)
print(a2)
print(a2.swapaxes(1, 0))
print(a3)
print(a3.swapaxes(0, 1))
print(a3.swapaxes(1, 2))
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 4 7]
[2 5 8]
[3 6 9]]
[[[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]]]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 4 7]
[2 5 8]
[3 6 9]]
[[[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]]]
배열 재구조화
- reshape() : 배열의 형상을 변경
import numpy as np
n1 = np.arange(1, 10)
print(n1)
print(n1.reshape(3, 3))
[1 2 3 4 5 6 7 8 9]
[[1 2 3]
[4 5 6]
[7 8 9]]
- newaxis() : 새로운 축 추가
import numpy as np
n1 = np.arange(1, 10)
print(n1)
print(n1[np.newaxis, :5]) # row 추가
print(n1[:5, np.newaxis]) # column 추가
[1 2 3 4 5 6 7 8 9]
[[1 2 3 4 5]]
[[1]
[2]
[3]
[4]
[5]]
배열 크기 변경
- 배열 모양만 변경
import numpy as np
n2 = np.random.randint(0, 10, (2, 5))
print(n2)
n2.resize((5, 2))
print(n2)
[[8 8 7 2 7]
[9 5 7 9 6]]
[[8 8]
[7 2]
[7 9]
[5 7]
[9 6]]
- 배열 크기 증가
- 남은 공간은 0으로 채워짐
import numpy as np
n2 = np.random.randint(0, 10, (2, 5))
print(n2)
n2.resize((5, 5))
print(n2)
[[0 4 8 4 9]
[0 0 2 1 2]]
[[0 4 8 4 9]
[0 0 2 1 2]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
- 배열 크기 감소
- 포함되지 않은 값은 삭제됨
import numpy as np
n2 = np.random.randint(0, 10, (2, 5))
print(n2)
n2.resize((3, 3))
print(n2)
[[6 5 9 7 1]
[4 4 6 3 7]]
[[6 5 9]
[7 1 4]
[4 6 3]]
배열 추가
- append() : 배열의 끝에 값 추가
import numpy as np
a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2 = np.arange(10, 19).reshape(3, 3)
print(b2)
c2 = np.append(a2, b2)
print(c2)
[[1 2 3]
[4 5 6]
[7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
- axis를 0으로 지정
- shape[0]을 제외한 나머지 shape은 같아야 함
import numpy as np
a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2 = np.arange(10, 19).reshape(3, 3)
print(b2)
c2 = np.append(a2, b2, axis = 0)
print(c2)
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14
[16 17 18]]15]
- axis를 1로 지정
- shape[1]을 제외한 나머지 shape은 같아야 함
import numpy as np
a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2 = np.arange(10, 19).reshape(3, 3)
print(b2)
c2 = np.append(a2, b2, axis = 1)
print(c2)
[[ 1 2 3 10 11 12]
[ 4 5 6 13 14 15]
[ 7 8 9 16 17 18]]
배열 연결
- concatenate() : 튜플이나 배열의 리스트를 인수로 사용해 배열 연결
import numpy as np
a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
np.concatenate([a1, b1])
print(np.concatenate([a1, b1]))
c1 = np.array([7, 8, 9])
np.concatenate([a1, b1, c1])
print(np.concatenate([a1, b1, c1]))
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
np.concatenate([a2, a2])
print(np.concatenate([a2, a2]))
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
np.concatenate([a2, a2])
print(np.concatenate([a2, a2], axis=1))
[1 3 5 2 4 6]
[1 3 5 2 4 6 7 8 9]
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
[[1 2 3 1 2 3]
[4 5 6 4 5 6]]
- vstack() : 수직 스택(vertical stack), 1차원으로 연결
import numpy as np
a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
print(np.vstack([a2, a2]))
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
- hstack() : 수평 스택(horizontal stack), 2차원으로 연결
import numpy as np
a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
print(np.hstack([a2, a2]))
[[1 2 3 1 2 3]
[4 5 6 4 5 6]]
- dstack() : 깊이 스택(depth stack), 3차원으로 연결
import numpy as np
a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
print(np.dstack([a2, a2]))
[[[1 1]
[2 2]
[3 3]]
[[4 4]
[5 5]
[6 6]]]
- stack() : 새로운 차원으로 연결
import numpy as np
a1 = np.array([1, 3, 5])
b1 = np.array([2, 4, 6])
a2 = np.array([[1, 2, 3],
[4, 5, 6]])
print(np.stack([a2, a2]))
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
배열 분할
- split() : 배열 분할
import numpy as np
a1 = np.arange(0, 10)
print(a1)
b1, c1 = np.split(a1, [5])
print(b1, c1)
c2, c2, d1, e1, f1 = np.split(a1, [2, 4, 6, 8])
print(b1, c1, d1, e1, f1)
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4] [5 6 7 8 9]
[0 1 2 3 4] [5 6 7 8 9] [4 5] [6 7] [8 9]
- vsplit() : 수직 분할, 1차원으로 분할
import numpy as np
a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2, c2 = np.vsplit(a2, [2])
print(b2, c2)
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]] [[7 8 9]]
- hsplit() : 수평 분할, 2차원으로 분할
import numpy as np
a2 = np.arange(1, 10).reshape(3, 3)
print(a2)
b2, c2 = np.hsplit(a2, [2])
print(b2, c2)
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2]
[4 5]
[7 8]] [[3]
[6]
[9]]
- dsplit() : 깊이 분할, 3차원으로 분할
import numpy as np
a3 = np.arange(1, 28).reshape(3, 3, 3)
print(a3)
b3, c3 = np.dsplit(a3, [2])
print(b3, c3)
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[[19 20 21]
[22 23 24]
[25 26 27]]]
[[[ 1 2]
[ 4 5]
[ 7 8]]
[[10 11]
[13 14]
[16 17]]
[[19 20]
[22 23]
[25 26]]] [[[ 3]
[ 6]
[ 9]]
[[12]
[15]
[18]]
[[21]
[24]
[27]]]
728x90
'파이썬(Python)' 카테고리의 다른 글
[Python] Visual Studio Code 에서 Python 단위테스트 사용하기 (0) | 2022.03.01 |
---|---|
[Python] NumPy 배열 연산 (0) | 2022.02.18 |
[Python] NumPy 배열 값 삽입/수정/삭제/복사 (0) | 2022.02.18 |
[Python] NumPy 배열 조회 (0) | 2022.02.18 |
[Python] NumPy 배열 생성 (0) | 2022.02.18 |
이 글을 공유하기