### 2021.12.18
배열 전치 및 축 변경
#In[]
import numpy as np
a2 = np.array([[1,2,3,], [4,5,6], [7,8,9]])
print(a2)
print(a2.T)
#Out[]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 4 7]
[2 5 8]
[3 6 9]]
#In[]
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(a3)
print(a3.T)
#Out[]
[[[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]]]
#In[]
print(a2)
print(a2.swapaxes(1,0))
#Out[]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 4 7]
[2 5 8]
[3 6 9]]
#In[]
print(a3)
print(a3.swapaxes(0,1)) #0차원 축과 1차원 축을 바꿔라
print(a3.swapaxes(1,2)) #1차원 축과 2차원 축을 바꿔라
#Out[]
[[[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(): 배열의 형상을 변경
#In[]
n1 = np.arange(1, 10)
print(n1)
print(n1.reshape(3,3))
#Out[]
[1 2 3 4 5 6 7 8 9]
[[1 2 3]
[4 5 6]
[7 8 9]]
- newaxis(): 새로운 축 추가
#In[1]
print(n1)
#Out[1]
[1 2 3 4 5 6 7 8 9]
#In[2]
print(n1[np.newaxis, :5])
#Out[2]
[[1 2 3 4 5]]
#In[3]
print(n1[:5, np.newaxis])
#Out[3]
[[1]
[2]
[3]
[4]
[5]]
배열 크기 변경 resize()
- 배열 모양만 변경
#In[1]
n2 = np.random.randint(0, 10, (2,5))
print(n2)
#Out[1]
[[4 4 8 0 7]
[1 1 3 8 9]]
#In[2]
n2.resize((5,2))
print(n2)
#Out[2]
[[4 4]
[8 0]
[7 1]
[1 3]
[8 9]]
- 배열 크기 증가
- 남은 공간은 0으로 채워짐
#In[]
n2.resize((5,5))
print(n2)
#Out[]
[[7 1 6 8 1]
[1 8 7 4 3]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
#코랩에서 실행이 안되어서 주피터노트북에서 실행!(값이 달라졌음)
- 배열 크기 감소
- 포함되지 않은 값은 삭제됨
#In[]
n2.resize((3,3))
print(n2)
#Out[]
[[7 1 6]
[8 1 1]
[8 7 4]]
배열 추가
- append(): 배열의 끝에 값 추가
#In[]
a2 = np.arange(1, 10).reshape(3,3)
print(a2)
b2 = np.arange(10,19).reshape(3,3)
print(b2)
#Out[]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
- axis 지정이 없으면 1차원 배열 형태로 변형되어 결합
#In[]
c2 = np.append(a2, b2)
print(c2)
#Out[]
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
- axis를 0으로 지정
- shape[0]을 제외한 나머지 shape은 같아야 함
#In[]
c2 = np.append(a2, b2, axis = 0)
print(c2)
#Out[]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]
[16 17 18]]
- axis를 1로 지정
- shape[1]을 제외한 나머지 shape은 같아야 함
#In[]
c2 = np.append(a2, b2, axis = 1)
print(c2)
#Out[]
[[ 1 2 3 10 11 12]
[ 4 5 6 13 14 15]
[ 7 8 9 16 17 18]]
배열 연결
- concatenate(): 튜플이나 배열의 리스트를 인수로 사용해 배열 연결
#In[1]
a1 = np.array([1,3,5])
b1 = np.array([2,4,6])
np.concatenate([a1,b1])
#Out[1]
array([1, 3, 5, 2, 4, 6])
#In[2]
c1 = np.array([7,8,9])
np.concatenate([a1,b1,c1])
#Out[2]
array([1, 3, 5, 2, 4, 6, 7, 8, 9])
#In[1]
a2 = np.array([[1,2,3,],
[4,5,6]])
np.concatenate([a2,a2])
#Out[1]
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
#In[2]
np.concatenate([a2,a2],axis=1)
#Out[2]
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
- vstack(): 수직 스택(vertical stack), 1차원으로 연결
#In[]
np.vstack([a2,a2])
#Out[]
array([[1, 2, 3],
[4, 5, 6],
[1, 2, 3],
[4, 5, 6]])
- hstack(): 수평 스택(horizontal stack), 2차원으로 연결
#In[]
np.hstack([a2,a2])
#Out[]
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6]])
- dstack(): 깊이 스택(depth stack), 3차원으로 연결
#In[]
np.dstack([a2,a2])
#Out[]
array([[[1, 1],
[2, 2],
[3, 3]],
[[4, 4],
[5, 5],
[6, 6]]])
- stack(): 새로운 차원으로 연결
#In[]
np.stack([a2,a2])
#Out[]
array([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]]])
배열 분할
- split(): 배열 분할
#In[1]
a1 = np.arange(0,10)
print(a1)
#Out[1]
[0 1 2 3 4 5 6 7 8 9]
#In[2]
b1, c1 = np.split(a1,[5])
print(b1, c1)
#Out[2]
[0 1 2 3 4] [5 6 7 8 9]
#In[3]
np.split(a1, [2,4,6,8])
#Out[3]
[array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])]
- vsplit(): 수직 분할, 1차원으로 분할
#In[]
a2 = np.arange(1, 10).reshape(3,3)
print(a2)
b2, c2 = np.vsplit(a2, [2])
print(b2)
print(c2)
#Out[]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]]
[[7 8 9]]
- hsplit(): 수평 분할, 2차원으로 분할
#In[]
a2 = np.arange(1, 10).reshape(3,3)
print(a2)
b2, c2 = np.hsplit(a2, [2])
print(b2)
print(c2)
#Out[]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2]
[4 5]
[7 8]]
[[3]
[6]
[9]]
- dsplit(): 깊이 분할, 3차원으로 분할
#In[]
a3 = np.arange(1, 28).reshape(3,3,3)
print(a3)
b3, c3 = np.dsplit(a3, [2])
print(b3)
print(c3)
#Out[]
[[[ 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]]]
'Youtube > NumPy' 카테고리의 다른 글
[NumPy] #5 배열 연산 (0) | 2021.12.18 |
---|---|
[Numpy] #3 배열 값 삽입/수정/삭제/복사 (0) | 2021.12.18 |
[NumPy] #2 배열조회 (0) | 2021.12.16 |