[넘파이(Numpy)]N차원 배열의 형태 변경(1) - reshape(), resize(), ravel()

Jihwan Jung·2022년 8월 5일
1

🎲넘파이

목록 보기
9/11
post-thumbnail
post-custom-banner

💡오늘 배울 내용


1차원 배열을 2차원으로 변경하거나, 1차원 배열을 3차원 배열 등으로 변경할 수 있습니다. 이처럼 shape을 변화시키는 방법을 배워봅시다.

🔎reshape()


1차원 배열의 shape을 2차원으로 변경하거나, 1차원 배열의 shape을 3차원으로 변경하려고 할때, Numpy 라이브러리에서 제공하는 reshape()함수를 이용할 수 있습니다.

1차원 배열의 shape을 2차원으로 변경하는 예제를 살펴봅시다.

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

arr2 = arr.reshape(3, 4)
print(arr2, arr2.ndim)
>> [[ 0  1  2  3]
    [ 4  5  6  7]
    [ 8  9 10 11]] 2
    
print(arr)
>> [ 0  1  2  3  4  5  6  7  8  9 10 11]

arr에 0부터 11까지 12개의 원소를 집어넣은 1차원 배열을 저장합니다. arr2라는 새로운 배열은 arr에 reshape()함수를 적용했고, 2차원 배열로 변경됐다는 것을 알 수 있습니다.

한가지 중요한 점은, arr에 reshape함수를 적용했을때 arr의 원본 데이터는 변화하지 않았다는 점입니다. 아래에서 arr를 다시 출력했을때 1차원 배열이 출력되는 것으로 알 수 있습니다.

이번에는 1차원 배열의 shape을 3차원으로 변경해보겠습니다.

arr = np.arange(12)
arr3 = arr.reshape(2, 3, 2) #3차원 배열로 변경
print(arr2, arr2.ndim)
>> [[[ 0  1]
     [ 2  3]
     [ 4  5]]
 
    [[ 6  7]
     [ 8  9]
     [10 11]]] 3

print(arr2.shape)
>> (2, 3, 2)

🍯매개변수 자동 계산


reshape() 함수를 사용할때는 매개변수를 입력해야합니다. 예를 들면, shape이 (12, )인 1차원 배열을 2차원 배열로 바꾸려면 같은 원소의 크기를 갖도록 해야합니다. 즉, (3, 4), (2, 6)등의 2차원 배열이 가능합니다.

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

arr = arr.reshape(3, -1) # -1입력하면 자동으로 4로 계산되어 들어감.
print(arr)
>> [[[ 1  2]
     [ 3  4]]
     
arr = arr.reshape(3, 2, -1) # -1입력하면 자동으로 2로 계산되어 들어감.
print(arr)
>>  [[ 5  6]
     [ 7  8]]

    [[ 9 10]
     [11 12]]]

이때 reshape 함수의 매개변수를 -1로 설정할 수 있습니다. 자동으로 값이 계산되어 알맞은 매개변수가 입력되어 연산을 진행합니다.

🔎resize()


resize()함수도 배열의 형태를 변경하는 함수입니다. 그렇다면 reshape()과의 차이점은 무엇일까요? 바로 resize()는 배열에 해당 함수를 적용했을때 원본 데이터를 변화시킨다는 것입니다.

resize() 함수를 이용하여, 1차원 배열을 2차원 배열로 바꿔보겠습니다.

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

arr.resize(3, 4)
print(arr)
>> [[ 0  1  2  3]
    [ 4  5  6  7]
    [ 8  9 10 11]]

역시 rezize()를 적용한 arr를 다른 변수에 저장해놓지 않아도 arr를 출력했을때 2차원 배열이 출력되는 것을 알 수 있습니다. 따라서 원본 데이터를 바꾸고 싶을때는 resize()를, 원본 데이터에는 영향이 없게 배열의 shape을 바꾸려면 reshape()을 쓰면 됩니다.

🔎ravel()


다차원 배열을 1차원으로 변경시킬 수 있는 ravel()함수에 대해 알아봅시다.

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

0개의 댓글