파이썬(Python)/numpy

[Python]Numpy 기본 팁: Max, Min, 조건검색(where), 정렬(Sort)

끄적끄적아무거나 2022. 3. 6. 19:42
반응형

 

목차

     

     

     

     

     

     

    파이썬 Numpy 최대값 찾기

     

    Numpy 리스트 중에서 최대값 찾는 것은 argmax 함수를 사용해서 검색 합니다.

     

    index 리턴 값 = np.argmax(리스트)

     

    위와 같이 index 값을 return 해 줍니다.

     

     

    예제 코드>>

    import random
    import numpy as np
    
    a_list = [random.randint(0,200) for x in range(10)]
    
    max_list = np.argmax(a_list)
    
    print("a_list : ", a_list)
    print("a_list max index : ", max_list)
    print("a_list max : ", a_list[max_list])

    4번 라인: 랜덤 함수로 임의의 리스트 값을 만듭니다.

    9번 라인: 출력 값은 list 중 최대 값의 index 값입니다.

    10번 라인: index 값을 list에 입력해서 최대 값을 찾습니다.

     

     

    결과>>

    a_list :  [88, 56, 181, 129, 64, 174, 132, 16, 164, 110]
    a_list max index :  2
    a_list max :  181

     

     

     

     

    파이썬 Numpy 최소값 찾기

     

     

    Numpy 리스트 중에서 최소값 찾는 것은 argmin 함수를 사용해서 검색 합니다.

     

    index 리턴 값 = np.argmin(리스트)

    위와 같이 index 값을 return 해 줍니다.

     

     

    예제 코드>>

    import random
    import numpy as np
    
    a_list = [random.randint(0,200) for x in range(10)]
    
    min_list = np.argmin(a_list)
    
    print("a_list : ", a_list)
    print("a_list min index : ", min_list)
    print("a_list min : ", a_list[min_list])

    4번 라인: 랜덤 함수로 임의의 리스트 값을 만듭니다.

    9번 라인: 출력 값은 list 중 최소 값의 index 값입니다.

    10번 라인: index 값을 list에 입력해서 최소 값을 찾습니다.

     

     

    결과>>

    a_list :  [57, 156, 37, 101, 184, 80, 4, 23, 151, 99]
    a_list min index :  6
    a_list min :  4

     

     

     

     

    파이썬 Numpy 조건문으로 검색하기

     

     

    Numpy 리스트의 값을 조건문으로 검색하는 함수는 np.argwhere 함수를 사용합니다.

     

     

    index 리턴 값 = np.argwhere(넘파이 리스트)

     

    앞서 min max는 리스트 값을 넣어도 넘파이에서 동작 했지만 이번에는 일반 list가 아닌 numpy list를 입력값으로 넣어야 합니다. 그렇지 않으면 아래와 같은 에러메세지가 발생 합니다.

     

    에러 발생>>

    Traceback (most recent call last):
      File "d:\py_test\test00\test03 copy.py", line 6, in <module>
        where_list = np.argwhere(a_list>50)
    TypeError: '>' not supported between instances of 'list' and 'int'

     

     

    예제 코드>>

    import random
    import numpy as np
    
    a_list = np.array([random.randint(0,200) for x in range(10)])
    
    where_list = np.argwhere(a_list>100)
    
    print("a_list : ", a_list)
    print("a_list > 50 index : ", where_list)
    print("a_list > 50 : ", a_list[where_list])

    4번 라인: 랜덤 함수로 임의의 리스트 값을 만듭니다.

    9번 라인: 출력 값이 100이상인 조건을 만족하는 값의 index를 출력 합니다.

     

     

    결과>>

    a_list :  [197  32 123  61 150 193   4  18  89   7]
    a_list > 50 index :  [[0]
     [2]
     [4]
     [5]]
    a_list > 50 :  [[197]
     [123]
     [150]
     [193]]

     

     

     

     

    파이썬 Numpy 정렬하기

     

     

    Numpy 리스트의 값을 정렬하는 함수는 argsort 함수를 사용합니다.

     

    index 리턴 값 = np어레이리스트.argsort()

     

    index 값을 리턴 받기 때문에 리스트에 인덱스 값을 넣으면 value 값을 불러 올 수 있습니다.

     

     

    예제 코드>>

    import random
    import numpy as np
    
    a_list = np.array([random.randint(0,200) for x in range(10)])
    
    sorted_list = a_list.argsort()
    
    print("a_list : ", a_list)
    print("sorted_list index : ", sorted_list)
    print("sorted_list : ", a_list[sorted_list])

    4번 라인: 랜덤 함수로 임의의 리스트 값을 만듭니다.

    9번 라인: a_list를 sort 하고 정렬된 값의 index를 sorted_list에 넣어 줍니다.

     

     

    결과>>

    a_list :  [ 11 126  78  60  67 183  21  53 151  62]
    sorted_list index :  [0 6 7 3 9 4 2 1 8 5]
    sorted_list :  [ 11  21  53  60  62  67  78 126 151 183]

     

     

    위 코드는 오름 차순(Ascending)이고 내림차순(Descending)으로 정렬하고 싶다면 위 예제 코드 결과에서 리스트의 순서를 뒤집는 [::-1]을 입력하면 됩니다. 10번 라인을 아래와 같이 변경 하면 됩니다.

    print("sorted_list : ", a_list[sorted_list][::-1])

     

     

     

     

    파이썬 Numpy 하나의 행을 기준으로 다른 행 array 정렬하기

     

     

     

     

    여러 열의 어레이(Array) 리스트 중에 하나만을 기준으로 다른 리스트(List) 값을 동일하게 함께 정렬하고 싶으면 기준이되는 행의 Array의 index 값을 return 받고 해당 index를 다른 어레이에 적용하면 됩니다.

     

    예제 코드>>

    import random
    import numpy as np
    
    a_list = np.array([random.randint(0,200) for x in range(10)])
    b_list = np.array([random.randint(0,200) for x in range(10)])
    
    sorted_list = a_list.argsort()
    
    print("a_list : ", a_list)
    print("sorted_list index : ", sorted_list)
    print("sorted a_list : ", a_list[sorted_list])
    print("sorted b_list : ", b_list[sorted_list])

    a_list 정렬 index 값을 b_list에 적용합니다.

     

     

    결과>>

    a_list :  [ 36 106  37 154  80  80 147 173  82  43]
    sorted_list index :  [0 2 9 4 5 8 1 6 3 7]
    sorted a_list :  [ 36  37  43  80  80  82 106 147 154 173]
    sorted b_list :  [ 43  43 131 166   6   1  53   2  44  24]
    반응형