ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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]]

     

    댓글