-
[Python] Numpy 배열 형태 변경하기공부/데이터 2020. 2. 19. 21:07
numpy 패키지는 배열의 형태를 손쉽게 변경해 주는 기능을 제공하고 있습니다. 1차원 배열을 2차원으로 바꿀 수 있으며 두 개의 배열을 1차원 또는 다차원 배열로 변형도 할 수 있습니다.
1. 배열의 형태 변경
reshape() 메소드를 사용하여 배열의 크기를 변경할 수 있습니다.
import numpy as np np_array = np.arange(1, 10) print(np_array) reshaped = np_array.reshape((3, 3)) print(reshaped) # [1 2 3 4 5 6 7 8 9] # [[1 2 3] # [4 5 6] # [7 8 9]]
배열의 모양을 변경할 때, 베이스가 되는 배열의 크기가 딱 맞아야지만 동작하고 적거나 더 많이 변형하고자 하면 오류가 발생합니다.
2. 배열 붙이기
concatenate() 메소드를 사용해 동일한 크기의 배열을 붙일 수 있습니다.
x = np.array([1, 2, 3]) y = np.array([3, 2, 1]) z = [11,11,11] a = np.concatenate([x, y, z]) print(a) grid = np.array([[1,2,3] , [4,5,6]]) b = np.concatenate([grid, grid]) print(b) # [ 1 2 3 3 2 1 11 11 11] # [[1 2 3] # [4 5 6] # [1 2 3] # [4 5 6]]
만약 다른 크기의 어레이를 붙이고 싶다면 concatenate()는 동작을 하지 않고 vstact() 또는 hstack()를 사용해야 합니다.
x = np.array([3,4,5]) grid = np.array([[1,2,3],[9,10,11]]) a = np.vstack([x,grid]) # vertically stack the arrays print(a) z = np.array([[19],[19]]) b = np.hstack([grid,z]) # horizontally stack the arrays print(b) # [[ 3 4 5] # [ 1 2 3] # [ 9 10 11]] # [[ 1 2 3 19] # [ 9 10 11 19]]
3. 배열 쪼개기
1차원 배열을 원하는 크기로 쪼개고 싶을 경우, split()을 사용합니다. split()함수의 두 번째 파라미터에 값을 주는 방식에 따라서 N+1로 쪼개거나 입력한 크기 범위로 쪼갤 수 있습니다.
x = np.arange(10) a = np.split(x,2) print(a) # [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])] a = np.split(x,3) print(a) # 10/3 으로 값이 떨어지지 않으므로 에러 a = np.split(x,5) print(a) # [array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])] # 2보다 작으면 첫 번째, 2와 같거나 크고 4보다 작으면 두 번째, 4보다 같거나 크면 세 번째 a = np.split(x,[2,4]) print(a) # [array([0, 1]), array([2, 3]), array([4, 5, 6, 7, 8, 9])] a = np.split(x,[5,8]) print(a) # [array([0, 1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])]
1차원 이상이라면 vsplit()이나 hsplit()을 사용하여 쪼갤 수 있습니다.
import numpy as np a = np.arange(16) grid = a.reshape((4, 4)) print(grid, "\n") upper, lower = np.vsplit(grid, 2) print(upper) print(lower, "\n") left, right = np.hsplit(grid, 2) print(left) print(right) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12 13 14 15]] # [[0 1 2 3] # [4 5 6 7]] # [[ 8 9 10 11] # [12 13 14 15]] # [[ 0 1] # [ 4 5] # [ 8 9] # [12 13]] # [[ 2 3] # [ 6 7] # [10 11] # [14 15]]