[넘파이(Numpy)]N차원 배열의 정렬 - 1차원 배열 정렬, 2차원 배열 정렬, sort(), argsort()

Jihwan Jung·2022년 8월 3일
1

🎲넘파이

목록 보기
8/11
post-thumbnail

💡오늘 배울 내용


여러 기준으로 배열을 정렬 할 수 있습니다. 오늘은 1차원 배열과 2차원 배열을 정렬하는 Numpy 함수들을 알아봅시다.

🔎1차원 배열 정렬


오름차순과 내림차순으로 1차원 배열을 정렬할 수 있습니다.

🔔오름차순


arr = np.random.randint(10, size=10)
print(arr)
>> [9 9 0 5 7 4 8 4 1 8]

print(np.sort(arr)) #원래 배열에 영향을 주지 못함
>> [0 1 4 4 5 7 8 8 9 9]

arr.sort() #원래 배열까지 바꿀 수 있음
print(arr)
>> [0 1 4 4 5 7 8 8 9 9]

arr = np.sort(arr) #원래 배열까지 바꿀 수 있음
print(arr)
>> [0 1 4 4 5 7 8 8 9 9]

위의 예제는 10부터 9까지의 정수 10개를 뽑아 배열 arr에 저장해 놓고, 오름차순으로 배열의 원소들을 정렬하는 예제입니다. sort()함수를 통해 이러한 정렬을 수행할 수 있습니다. 알아두어야 할 것은 np.sort()를 이용하면 원래의 배열에 영향을 주지 못하고, 원래 배열까지 바꾸려면 arr.sort()나 arr = np.sort(arr) 처럼 써야합니다.

🔔내림차순


arr = np.random.randint(10, size=10)
print(arr)
>> [8 4 8 3 6 2 7 4 9 3]

print(np.sort(arr)[::-1]) #원래 배열에 영향을 주지 못함
>> [9 9 8 8 7 5 4 4 1 0]

arr = np.sort(arr)[::-1] #원래 배열까지 바꿀 수 있음
print(arr)

[::-1]을 입력하면 해당 배열을 뒤집은 결과를 반환하므로, 이를 내림차순 정렬에 활용할 수 있습니다.

🔎2차원 배열 정렬


2차원 배열은 매개변수인 axis를 기준으로 하여 정렬할 수 있습니다. axis=0을 기준으로 정렬할 수도 있고, axis=1을 기준으로 할 수도 있습니다. 어떤 기준을 선택하냐에 따라 정렬되는 양상이 서로 다르므로 이를 기억해둘 필요가 있습니다.

🔔axis=1 기준 정렬


sort()함수를 통해 2차원 배열을 정렬할때, axis기준을 설정하지 않으면 자동으로 axis=1을 기준으로 정렬됩니다. 즉, sort()함수에서의 매개변수 axis의 default값은 1입니다.

axis = 1 : 각 행에 대한 모든 열에서 동작

arr = np.random.randint(15, size=(3, 4))
print(arr)
>> [[13 12  5 10]
    [11  6 13  4]
    [ 4  9  9 14]]
    
print(np.sort(arr))
>> [[ 5 10 12 13]
    [ 4  6 11 13]
    [ 4  9  9 14]]

print(np.sort(arr, axis=1))
>> [[ 5 10 12 13]
    [ 4  6 11 13]
    [ 4  9  9 14]]

🔔axis=0 기준 정렬


axis = 0 : 각 열에 대한 모든 행에서 동작

arr = np.random.randint(15, size=(3, 4))
print(arr)
>> [[13 12  5 10]
    [11  6 13  4]
    [ 4  9  9 14]]
    
print(np.sort(arr, axis=0))
>> [[ 4  6  5  4]
    [11  9  9 10]
    [13 12 13 14]]

🔔전체 배열을 1차원으로 정렬


2차원 배열을 1차원 배열로 변경하여, 전체 배열을 정렬 할 수 있습니다. 역시 매개변수 axis를 조절하는 방식으로 가능하며, 이때는 axis를 None으로 설정해주면 됩니다.

arr = np.random.randint(15, size=(3, 4))
print(arr)
>> [[13 12  5 10]
    [11  6 13  4]
    [ 4  9  9 14]]
    
print(np.sort(arr, axis=None))
>> [ 4  4  5  6  9  9 10 11 12 13 13 14]

🔎argsort()


argsort() 함수는 정렬이 된 배열의 원소들의 원래 배열에서의 위치를 출력하는 함수입니다. 말이 어렵죠? 예제를 통해 살펴봅시다.

arr = np.array([3, 2, 1]) #1차원 배열 [3 2 1] 생성

print(np.argsort(arr))
>> [2 1 0]

1차원 배열 [3 2 1]을 만들고, 이를 argsort()를 통해 출력해 보았습니다. [2 1 0]이라는 값이 찍히는데요, 이는 1차원 배열 [3, 2, 1]이 sort()를 통해 정렬되면 [1, 2, 3]이 되는데 이렇게 정렬이 된 배열들의 원래 배열에서의 위치를 살펴보면 [2(번째), 1(번째), 0(번째)]가 됩니다.

profile
22.10月~24.07月 공군 암호병 복무중/ 사회 과학과 딥 러닝에 관심이 있는 학부생(CS&E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.

0개의 댓글