오답노트

[Numpy] 배열의 정렬 본문

Python/Numpy

[Numpy] 배열의 정렬

권멋져 2022. 7. 11. 19:20

sort

sort 함수를 통해 배열을 오름차순 또는 내림차순으로 정렬할 수 있다.

 

1차원 배열 정렬

sort 함수의 기본은 오름차순이다. 내림차순으로 정렬시 [::-1] 을 붙혀주면 되고, 의미는 처음부터 끝까지 반대 방향으로 보겠다는 의미다.

arr = np.random.randint(10,size=10)
print(arr)				# [0 4 9 6 4 9 8 2 2 2]
print(np.sort(arr))			# [0 2 2 2 4 4 6 8 9 9]
print(np.sort(arr)[::-1])		# [9 9 8 6 4 4 2 2 2 0]

 

2차원 배열 정령

2차원 배열을 정렬 할때, aixs 속성에 따라 행을 기준으로 정렬할지 열을 기준으로 정렬할지 정할 수 있다. 그리고 None으로 주었을 경우 1차원 배열로 정렬된 결과를 반환한다.

arr = np.random.randint(10,size= [3,4])
print(arr)
'''''''

[[4 6 5 1]
 [9 1 4 3]
 [0 4 5 8]]

'''''''

print(np.sort(arr)) # 기본은 axis = 1
'''''''

[[1 4 5 6]
 [1 3 4 9]
 [0 4 5 8]]

'''''''

print(np.sort(arr, axis = 0))
'''''''

[[0 1 4 1]
 [4 4 5 3]
 [9 6 5 8]]

'''''''

print(np.sort(arr, axis = None)) # 2차원 -> 1차원
# [0 1 1 3 4 4 4 5 5 6 8 9]

 

argsort

argsort는 sort로 정렬이 됐을 때 정렬된 원소의 원래(sort 이전) 위치를 반환한다.

 

print(arr)
'''''''

[[4 6 5 1]
 [9 1 4 3]
 [0 4 5 8]]

'''''''

print(np.sort(arr, axis = 1))
'''''''

[[1 4 5 6]
 [1 3 4 9]
 [0 4 5 8]]

'''''''

print(np.argsort(arr,axis = 1))
'''''''

[[3 0 2 1]
 [1 3 2 0]
 [0 1 2 3]]


'''''''

위 코드 블럭에서 0번째 행만 살펴보면

sort 이전에는 [4,6,5,1] 이였고 sort 후 [1,4,5,6] 으로 정렬되었다.

이때 각 원소들의 원래 위치는 [3,0,2,1] 이고, 이것은 argsort의 0번째 행과 같다.

 

아래는 axis가 0일 때이다.

print(arr)
'''''''

[[4 6 5 1]
 [9 1 4 3]
 [0 4 5 8]]

'''''''

print(np.sort(arr, axis = 0))
'''''''

[[0 1 4 1]
 [4 4 5 3]
 [9 6 5 8]]

'''''''

print(np.argsort(arr,axis = 0))
'''''''

[[2 1 1 0]
 [0 2 0 1]
 [1 0 2 2]]

'''''''

0번 째 열은 [4,9,0] 이고 정렬 후에는 [0,4,9] 가 되었다. 정렬전의 위치는 [2,0,1] 이고 이는 argsort의 0번째 열과 같다.