머신러닝/넘파이

[Numpy] sort 기본 종류 별 사용 방법

shoney9254 2021. 8. 24. 20:23
반응형

1) np.sort(변경할ndarray)

정렬된 값을 리턴한다. 기존 ndarray는 변환하지 않는다. 기존의 값을 그대로 유지해야하면 사용한다. 

소스 코드

ndarray1 = np.array([3, 2, 5, 1, 4])

print(ndarray1)

sort1 = np.sort(ndarray1)

print('sort1 반환값:', sort1)

print('sort1 원본값:', ndarray1)

 

결과

[3 2 5 1 4]
sort1 반환값: [1 2 3 4 5]
sort1 원본값: [3 2 5 1 4]

 

 

2) 변경할ndarray.sort()

반환값이 없다. 원본 ndarray 값을 변경시킨다. 기존 값을 변경하기 때문에 기존 ndarray 값이 필요 없을 때 사용

소스 코드

ndarray1 = np.array([3, 2, 5, 1, 4])

print(ndarray1)

sort2 = ndarray1.sort()

print('sort2 반환값:', sort2)

print('sort2 원본값:', ndarray1)

결과

[3 2 5 1 4]
sort2 반환값: None
sort2 원본값: [1 2 3 4 5]

 

 

3) 내림차순

np.sort는 디폴트로 오름차순으로 행렬 내 원소를 정렬한다.

그래서, 내림차순으로 정렬하기 위해서는 [::-1] 를 적용해야합니다. 

소스 코드

sort1 = np.sort(ndarray1)[::-1]

print('sort1 반환값:', sort1)

결과

sort1 반환값: [5 4 3 2 1]

 

 

4) 2차원 배열 sort

numpy에서는 2차원 배열의 sort를 axis 축의 방향으로 할수있다. 

소스 코드

ndarray2d = np.array(

    [[6, 4, 9],

    [7, 2, 3],

    [5, 8, 1]])

 

sort2d0 = np.sort(ndarray2d, axis=0)

sort2d1 = np.sort(ndarray2d, axis=1)

print('axis=0 : \n', sort2d0)

print('axis=1 : \n', sort2d1)

결과

axis=0 :
 [[5 2 1]
 [6 4 3]
 [7 8 9]]
axis=1 :
 [[4 6 9]
 [2 3 7]
 [1 5 8]]

axis = 0 이라고 하면, ↓이 방향으로 sort 됩니다. 

axis = 1 이라고 하면, → 방향으로 sort 됩니다. 

axis가 아직 헷갈리는 분은 오른쪽 링크 클릭 ([Numpy] ndarray 의 axis 축 개념 및 소스 코드 예제)

 

 

5) argsort()

 원본 행렬을 sorting 하고 원래 인덱스의 값을 반환합니다. 

소스 코드

ndarray1 = np.array([3, 2, 5, 1, 4])

print('기존:', ndarray1)

print('소팅:', np.sort(ndarray1))

argsort1 = np.argsort(ndarray1)

print('소팅 인덱스:', argsort1)

결과

기존: [3 2 5 1 4]
소팅: [1 2 3 4 5]
소팅 인덱스: [3 1 0 4 2]

 

이렇게 인덱스 값을 따로 받을 수 있게되면, 키- 값 으로 묶음으로 사용할 수 있습니다. 

위 소스코드에서 조그만 내용을 더 추가해보겠습니다. 

argsort1 은 소팅된 인덱스 기존 값을 반환합니다. 반환 타입은 np.ndarray 입니다. 

해당 값을 ndarray의 []대괄호에 넣게되면, 텍스트도 숫자가 소팅된 순서대로 소팅되는 것을 확인할 수 있습니다. 

소스 코드

ndarray1 = np.array([3, 2, 5, 1, 4])

print('기존:', ndarray1)

print('소팅:', np.sort(ndarray1))

argsort1 = np.argsort(ndarray1)

print('소팅 인덱스:', argsort1)

 

ndarray2 = np.array(["A", "B", "C", "D", "E"])

print('텍스트 기존:', ndarray2)

print('텍스트 소팅:', ndarray2[argsort1])

결과

기존: [3 2 5 1 4]
소팅: [1 2 3 4 5]
소팅 인덱스: [3 1 0 4 2]
텍스트 기존: ['A' 'B' 'C' 'D' 'E']
텍스트 소팅: ['D' 'B' 'A' 'E' 'C']

 

반응형