[넘파이(Numpy)]N차원 배열의 병합 - 배열에 원소 추가/삭제, 배열 간의 병합, 배열 분할

Jihwan Jung·2022년 8월 9일
1

🎲넘파이

목록 보기
11/11
post-thumbnail

💡오늘 배울 내용


드디어 Numpy의 마지막 시간, n차원 배열의 병합입니다. 오늘은 배열에 원소를 추가하거나 삭제하는 법, 두 배열을 병합하고 분할하는 방법에 대해 배워봅시다.

🔎배열에 원소 추가


insert()함수를 이용하여 n차원 배열에 원소를 더할 수 있습니다. 틀이 정해져 있는 배열이지만 배열을 조금만 확장공사 한다고 생각하면 됩니다.

🔔1차원 배열


#파이썬 리스트
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.insert(2, 50)
print(arr)
>> [1, 2, 50, 3, 4, 5, 6, 7, 8]

#넘파이
arr = np.arange(1, 9)
arr = np.insert(arr, 2, 50)
print(arr)
>> [ 1  2 50  3  4  5  6  7  8]

넘파이에서 insert()함수를 이용하면 배열에 원소를 더할 수 있습니다. insert()함수의 매개변수로는 (배열, 위치, 원소)가 들어갑니다.

🔔2차원 배열(axis 입력X)


2차원 배열에서 원소를 추가할때, axis를 입력하지 않으면 1차원으로 변형하여 원소를 추가해줍니다.

arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
arr1 = np.insert(arr, 2, 50)
print(arr1)
>> [ 1  2 50  3  4  5  6  7  8  9 10 11 12]

🔔2차원 배열(axis=0)


axis=0은 각 열의 모든 행에서 동작함을 의미합니다. 즉, 행을 하나 확장함과 동시에 원소를 추가하는 것입니다.

arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
arr2 = np.insert(arr, 2, 50, axis=0)
print(arr2)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [50 50 50 50]
    [ 9 10 11 12]]

🔔2차원 배열(axis=1)


axis=1은 각 행의 모든 열에서 동작함을 의미합니다. 즉, 열을 하나 확장함과 동시에 원소를 추가하는 것입니다.

arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
arr3 = np.insert(arr, 2, 50, axis=1)
print(arr3)
>> [[ 1  2 50  3  4]
    [ 5  6 50  7  8]
    [ 9 10 50 11 12]]

🔎배열에 원소 삭제


delete()함수를 통해 n차원 배열에 원소를 제거할 수 있습니다.

🔔1차원 배열


arr = np.arange(1, 13)
print(arr)
>> [ 1  2  3  4  5  6  7  8  9 10 11 12]

arr = np.delete(arr, 2)
print(arr)
>> [ 1  2  4  5  6  7  8  9 10 11 12]

delete()함수의 매개변수로 배열명과 제거할 위치를 입력해주면 해당 위치의 원소를 삭제할 수 있습니다.

🔔2차원 배열(axis=0)


arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]

arr = np.delete(arr, 2, axis=0)
print(arr)
>> [[1 2 3 4]
    [5 6 7 8]]

axis=0은 행을 의미합니다. 3행을 제거한다는 의미로 delete(arr, 2, axis=0)처럼 쓸 수 있습니다.

🔔2차원 배열(axis=1)


arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]

arr = np.delete(arr, 2, axis=1)
print(arr)
>> [[ 1  2  4]
    [ 5  6  8]
    [ 9 10 12]]

axis=1은 열을 의미합니다. 3열을 제거한다는 의미로 delete(arr, 2, axis=1)처럼 쓸 수 있습니다.

🔎2차원 배열 간의 병합


두 배열을 합치는 것을 '배열을 병합한다'고 합니다. 역시 axis를 조정하여 열축과 행축중 어떤것을 기준으로 배열을 병합할지 정할 수 있습니다.

🔔np.append(axis=0)


arr1 = np.arange(1, 13).reshape(3, 4)
arr2 = np.arange(13, 25).reshape(3, 4)

print(arr1)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
print(arr2)
>> [[13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]
    
arr3 = np.append(arr1, arr2, axis=0)
print(arr3)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]
    [13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]

행(axis=0)을 추가하듯이 두 배열을 병합하려고 할때, append()함수의 매개변수 axis에 0을 쓸 수 있습니다.

🔔vstack()


append()함수에 매개변수 axis=0을 입력한 append(axis=0)을 한번에 함수로 쓸 수 있습니다. vstack()함수를 이용하면 행을 추가하듯 가로줄을 기준으로 병합합니다.

arr1 = np.arange(1, 7).reshape(2, 3)
arr2 = np.arange(7, 13).reshape(2, 3)

print(arr1)
>> [[1 2 3]
    [4 5 6]]
    
print(arr2)
>> [[ 7  8  9]
    [10 11 12]]

arr3 = np.vstack(arr1, arr2)
print(arr3)
>> [[ 1  2  3]
    [ 4  5  6]
    [ 7  8  9]
    [10 11 12]]

🔔np.append(axis=1)


arr1 = np.arange(1, 13).reshape(3, 4)
arr2 = np.arange(13, 25).reshape(3, 4)

print(arr1)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
print(arr2)
>> [[13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]
    
arr4 = np.append(arr1, arr2, axis=1)
print(arr4)
>> [[ 1  2  3  4 13 14 15 16]
    [ 5  6  7  8 17 18 19 20]
    [ 9 10 11 12 21 22 23 24]]

열(axis=1)을 추가하듯이 두 배열을 병합하려고 할때, append()함수의 매개변수 axis에 1을 쓸 수 있습니다.

🔔hstack()


append()함수에 매개변수 axis=1을 입력한 append(axis=1)을 한번에 함수로 쓸 수 있습니다. hstack()함수를 이용하면 열을 추가하듯 세로줄을 기준으로 병합합니다.

arr1 = np.arange(1, 7).reshape(2, 3)
arr2 = np.arange(7, 13).reshape(2, 3)

print(arr1)
>> [[1 2 3]
    [4 5 6]]
    
print(arr2)
>> [[ 7  8  9]
    [10 11 12]]

arr4 = np.hstack((arr1, arr2))
print(arr4)
>> [[ 1  2  3  7  8  9]
    [ 4  5  6 10 11 12]]

🔔np.append()


axis 변수를 입력하지 않고 두 배열을 병합할 수 있습니다. 이렇게 하면 두 배열을 각각 1차원 배열로 만든뒤 원소를 합쳐 출력합니다.

arr1 = np.arange(1, 13).reshape(3, 4)
arr2 = np.arange(13, 25).reshape(3, 4)

print(arr1)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
print(arr2)
>> [[13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]

arr5 = np.append(arr1, arr2)
print(arr5)
>> [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]

🔎1차원 배열 분할


1차원인 하나의 배열을 여러개의 배열로 분할 할 수 있습니다. 예제를 통해 알아봅시다.

arr = np.arange(1, 13)
print(arr)
>> [ 1  2  3  4  5  6  7  8  9 10 11 12]

arr = np.split(arr, 6)
print(arr)
>> [array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8]), array([ 9,        10]), array([11, 12])]

split()함수의 매개변수에는 배열과, 분할하고 싶은 개수를 입력할 수 있습니다.

🔎2차원 배열 분할


2차원 배열을 여러개의 배열로 분할 할 수 있습니다. 역시 axis가 중요 매개변수입니다.

🔔vsplit()


vsplit()함수는 split()함수에 매개변수 axis=0을 적용시킨 것을 하나의 함수로 만든 것으로, 행을 각각 쪼개듯이 분할합니다. 예제를 통해 알아봅시다.

arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
arr_vsplit = np.vsplit(arr, 3)
print(arr_vsplit)
>> [array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]

몇개의 배열로 나눌 것인지를 입력할 수 있습니다. 상식적으로 3행 4열짜리 배열을 행을 쪼개듯이 4개의 배열로 만들수는 없는 것입니다.

🔔hsplit()


hsplit()함수는 split()함수에 매개변수 axis=1을 적용시킨 것을 하나의 함수로 만든 것으로, 열을 각각 쪼개듯이 분할합니다. 예제를 통해 알아봅시다.

arr = np.arange(1, 13).reshape(3, 4)
print(arr)
>> [[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]
    
arr_hsplit = np.hsplit(arr, 2)
print(arr_hsplit)
>> [array([[ 1,  2],
           [ 5,  6],
           [ 9, 10]]), array([[ 3,  4],
           [ 7,  8],
           [11, 12]])]
profile
22.10月~24.07月 공군 암호병 복무중/ 사회 과학과 딥 러닝에 관심이 있는 학부생(CS&E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.

0개의 댓글