파이썬/파이썬 심화
[파이썬 심화] 2-2. NumPy 배열 변형
Harvie
2023. 6. 1. 18:00
반응형
전치(transpose)
- 행과 열을 바꾸는 작업 - T로 표기
a = np.array([[1,2,3],[4,5,6]])
print(a)
'''
[[1,2,3]
[4,5,6]]
'''
print(a.T)
'''
[[1,4]
[2,5]
[3,6]]
'''
크기 변형
- 배원 차원 변형 - reshape
a = np.arange(12)
print(a) # [0 1 2 3 4 5 6 7 8 9 10 11]
b=a.reshape(3,4)
print(b)
'''
[[0 1 2 3]
[4 5 6 7]
[8 9 10 11]]
'''
- reshape() 함수 안에 -1로 대체 가능 ( 원소 개수는 정해져 있어서 가능 ) ※ reshape한 배열들은 완전히 다른 배열이다.
a = np.arange(12)
print(a) # [0 1 2 3 4 5 6 7 8 9 10 11]
b = a.reshape(3,-1)
print(b)
'''
[[0 1 2 3]
[4 5 6 7]
[8 9 10 11]]
'''
c = a.reshape(2,2,-1)
'''
[[[0 1 2]
[3 4 5]]
[[6 7 8]
[9 10 11]]]
'''
d = a.reshape(2,-1,2)
'''
[[[0 1]
[2 3]
[4 5]]
[[6 7]
[8 9]
[10 11]]]
'''
- 1차원으로 변형 - flatten, ravel
print(b.flatten()) # [0 1 2 3 4 5 6 7 8 9 10 11]
print(b.ravel()) # [0 1 2 3 4 5 6 7 8 9 10 11]
배열 연결 (concatenate)
- 행이 같은 두개 이상의 배열을 옆으로 연결 - hstack ( h는 horizontal(수평) )
a1 = np.ones((2,3))
print(a1)
'''
[[1. 1. 1.]
[1. 1. 1.]]
'''
a2 = np.zeros((2,2))
print(a2)
'''
[[0. 0.]
[0. 0.]]
'''
b = np.hstack([a1,a2])
print(b)
'''
[[1. 1. 1. 0. 0.]
[1. 1. 1. 0. 0.]]
'''
- 열이 같은 두개 이상의 배열을 위아래로 연결 - vstack ( v는 vertical(수직) )
a1 = np.ones((2,3))
print(a1)
'''
[[1. 1. 1.]
[1. 1. 1.]]
'''
a2 = np.zeros((3,3))
print(a2)
'''
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
'''
b = np.vstack([a1,a2])
print(b)
'''
[[1. 1. 1.]
[1. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
'''
- 깊이(depth) 방향으로 배열을 연결 - dstack
a1 = np.ones((3,4))
print(a1)
'''
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
'''
a2 = np.zeros((3,4))
print(a2)
'''
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
'''
b = np.dstack([a1,a2]) # (3,4)였던 2차원 배열이 (3,4,2)인 3차원 배열로 바뀜.
print(b)
'''
[[[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]
[[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]
[[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]]
'''
- axis 인수를 통해 추가되는 차원을 결정 - stack
a1 = np.ones((3,4))
print(a1)
'''
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
'''
a2 = np.zeros((3,4))
print(a2)
'''
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
'''
b = np.stack([a1,a2]) # axis 디폴트 값은 0 , (3,4)배열 두 개가 (2,3,4)배열이 됨
print(b)
'''
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]]
'''
c = np.stack([a1,a2],axis=1) # (3,4)배열 두 개가 (3,2,4)배열이 됨
print(c)
'''
[[[1. 1. 1. 1.]
[0. 0. 0. 0.]]
[[1. 1. 1. 1.]
[0. 0. 0. 0.]]
[[1. 1. 1. 1.]
[0. 0. 0. 0.]]]
'''
d = np.stack([a1,a2],axis=2) # (3,4)배열 두 개가 (3,4,2)배열이 됨
print(d)
'''
[[[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]
[[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]
[[1. 0.]
[1. 0.]
[1. 0.]
[1. 0.]]]
'''
- 1차원 배열을 열(column)로 바꿔 좌우로 연결 - c_ ※ 이 친구는 특수 메서드여서 ()가 아닌 []을 사용합니다
a = np.array([0,1,2])
b = np.array([3,4,5])
print(c_[a,b])
'''
[[0 3]
[1 4]
[2 5]]
'''
- 첫번째 차원을 기준으로 연결하여 연결 방향을 지정 - r_. ※ 이 친구는 특수 메서드여서 ()가 아닌 []을 사용합니다
# 1차원이 기준일 때
a = np.array([0,1,2])
b = np.array([3,4,5])
print(np.r_[a,b]) # [0 1 2 3 4 5]
# 2차원이 기준일 때
c = np.array([[0,1,2],[0,1,2]])
d = np.array([[3,4,5],[3,4,5]])
print(np.r_[c,d])
'''
[[0 1 2]
[0 1 2]
[3 4 5]
[3 4 5]]
'''
# 연결 방향 지정 가능
print(np.r_['0',c,d]) # 디폴트 값
'''
[[0 1 2]
[0 1 2]
[3 4 5]
[3 4 5]]
'''
print(np.r_['1',c,d]) # 1차원
'''
[[0 1 2 3 4 5]
[0 1 2 3 4 5]]
'''
- 동일한 배열을 반복하여 연결 - tile
a = np.array([[0,1,2],[3,4,5]])
print(np.tile(a,2))
'''
[[0 1 2 0 1 2]
[3 4 5 3 4 5]]
'''
print(np.tile(a,(3,2))
'''
[[0 1 2 0 1 2]
[3 4 5 3 4 5]
[0 1 2 0 1 2]
[3 4 5 3 4 5]
[0 1 2 0 1 2]
[3 4 5 3 4 5]]
'''
- 그리드 포인트
x = np.arange(3) # [0 1 2]
y = np.arange(5) # [0 1 2 3 4]
X, Y = np.meshgrid(x,y) # 가로로 x배열 크기만큼(3), 세로로 Y배열 크기만큼(5)
print(X)
'''
[[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]
[0 1 2]]
'''
print(Y)
'''
[[0 0 0]
[1 1 1]
[2 2 2]
[3 3 3]
[4 4 4]]
'''
print([list(zip(x,y)) for x,y in zip(X,Y)]) # zip : 괄호 안의 요소를 묶어주는 함수
'''
[[(0,0),(1,0),(2,0)]
[(0,1),(1,1),(2,1)]
[(0,2),(1,2),(2,2)]
[(0,3),(1,3),(2,3)]
[(0,4),(1,4),(2,4)]]
'''
반응형