파이썬(Python)/numpy

[Python]리스트안의 동일 값 개수, 집합, 정렬하기(Numpy.unique)

끄적끄적아무거나 2022. 1. 10. 09:24
반응형

 

목차

     

     

     

    Numpy Unique 란?

     

     

    앞서 포스트에서 Numpy를 사용하면 시간을 절얄하고 왜 효율적인지에 대해 설명하였습니다.

     

    이번장에서는 Numpy로 사용할 수 있는 효율적인 함수에 대해 알아보겠습니다. 

     

    • Unique()

     

    Numpy Unique 는 Numpy 배열의 값을 검색해서 동일 값을 정리해거나, 정렬, 개수 확인 등을 해줍니다. Sytax는 아래와 같습니다.

     

    numpy.unique(배열값, return_index=False, return_inverse=False, return_counts=False, axis=None)

     

    내부에 option 값은 아래 예제를 통해 쉽게 이해하도록 하겠습니다.

     

     

     

     

    리스트(list) 안의 정렬하고 동일 값(Same value, element) 구하기

     

    • return_index 

     

    넘파이 배열 안의 값을 정렬하고 동일한 값은 삭제하고 하나만 남기고 고유 값이 처음으로 나온 Index 번호를 알려주는 Option은 return_index 입니다. 아래 예제를 통해 확인해보겠습니다.

     

    예제 코드>>

    import numpy as np
    import random
    
    a_list = []
    for _ in range(10):
        a_list.append(random.randint(1,20))
    
    print(a_list)
    unique_array=np.unique(a_list,return_index=True)
    
    print(unique_array)

    4~6번 라인: a_list에 1~20까지의 정수 중를 랜덤으로 만들어서 10개를 넣었습니다.

    8번 라인: a_list 값 확인

    9번 라인: return_index 를 True로 설정했습니다.

     

     

    결과>>

    [11, 15, 16, 16, 11, 6, 3, 16, 6, 13]
    (array([ 3,  6, 11, 13, 15, 16]), array([6, 5, 0, 9, 1, 2], dtype=int64))

    결과에서 array([ 3,  6, 11, 13, 15, 16]) 는 a_list 중에 고유 값 만으로 만든 Numpy list 이고 자동으로 정렬 되었음을 알 수 있습니다.

    그리고 array([6, 5, 0, 9, 1, 2] 는 각 값들이 발생한 index 값입니다. 예를 들어 3은 6이므로 a_list[6] 에서 처음 나왔다는 뜻입니다.

     

     

     

     

     

    리스트(list) 안의 정렬하고 동일 값(Same value, element) 개수 구하기

     

    • return_counts

     

    Numpy 배열의 값을 정렬하고 동일 값은 하나만 남기고 고유값의 갯수를 구하는 옵션이 return_counts 입니다. 아래 예제를 통해 확인해 보겠습니다.

     

    import numpy as np
    import random
    
    a_list = []
    for _ in range(10):
        a_list.append(random.randint(1,20))
    
    print(a_list)
    unique_array=np.unique(a_list,return_counts=True)
    
    print(unique_array)

    4~6번 라인: a_list에 1~20까지의 정수 중를 랜덤으로 만들어서 10개를 넣었습니다.

    8번 라인: a_list 값 확인

    9번 라인: return_counts 를 True로 설정했습니다.

     

     

    결과>>

    [9, 3, 13, 10, 13, 12, 12, 7, 6, 2]
    (array([ 2,  3,  6,  7,  9, 10, 12, 13]), array([1, 1, 1, 1, 1, 1, 2, 2], dtype=int64))

    결과에서 a_list에서 12와 13만 총 2번 발생했습니다. 나머지는 한번씩만 발생했습니다.

    출력값에서 각 고유 값의 개수를 확인할 수 있습니다.

     

     

     

    그외 옵션 : return_inverse, axis

     

    return_inverse 는 역으로 값을 찾아 갑니다. 

     

    코드>>

    import numpy as np
    import random
    
    a_list = []
    for _ in range(10):
        a_list.append(random.randint(1,10))
    
    print(a_list)
    unique_array=np.unique(a_list,return_inverse=True)
    
    print(unique_array)

     

    결과>>

    [3, 6, 7, 3, 10, 9, 6, 4, 7, 2]
    (array([ 2,  3,  4,  6,  7,  9, 10]), array([1, 3, 4, 1, 6, 5, 3, 2, 4, 0], dtype=int64))

    결과에서 a_list[1] = 3, a_list[3] = 6 이다. 이처럼 a_list에 연계해서 값을 알려 줍니다.

     

     

    axis는 위 와같이 1차 배열일 경우 aixs=0 으로 진행한 것이지만 배열이 여러개 일 경우 aixs를 사용해서 원하는 위치의 배열을 정할 수 있습니다.

     

     

     

    Numpy 배열 값 list로 출력하기

     

    참고로 numpy list 출력 값에서 list만 가져오고 싶을 경우 출력 값에 [0]과 같이 원하는 list의 위치를 불러 주시면 됩니다. 

     

    예제 코드>>

    import numpy as np
    import random
    
    a_list = []
    for _ in range(10):
        a_list.append(random.randint(1,10))
    
    print(a_list)
    unique_array=np.unique(a_list,return_inverse=True)
    
    print(unique_array[0])

    11번 라인 [0]을 사용해서 첫번째 리스트 값을 출력 합니다.

     

    결과>>

    [8, 10, 9, 7, 8, 4, 3, 7, 10, 6]
    [ 3  4  6  7  8  9 10]

     

     

     

    반응형