여러 기준으로 배열을 정렬 할 수 있습니다. 오늘은 1차원 배열과 2차원 배열을 정렬하는 Numpy 함수들을 알아봅시다.
오름차순과 내림차순으로 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차원 배열은 매개변수인 axis를 기준으로 하여 정렬할 수 있습니다. axis=0을 기준으로 정렬할 수도 있고, 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 : 각 열에 대한 모든 행에서 동작
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]]
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() 함수는 정렬이 된 배열의 원소들의 원래 배열에서의 위치를 출력하는 함수입니다. 말이 어렵죠? 예제를 통해 살펴봅시다.
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(번째)]가 됩니다.