Coding Diary.

(파이썬) NumPy 부울 값 인덱싱, 집합 연산, np.sort() 정렬 본문

Coding/Python

(파이썬) NumPy 부울 값 인덱싱, 집합 연산, np.sort() 정렬

life-of-nomad 2024. 6. 14. 13:10
728x90
반응형
이전 글에서 NumPy의 슬라이싱을 이용하여 요소들을 선택하는 방법을 알아보았습니다. 선택하려는 요소의 정확한 인덱스를 알고 있을 때는 그 방법이 유용하지만, 선택하려는 요소의 인덱스를 모르는 경우도 있습니다. 이번 글에서는 이러한 경우 유용한 부울 값 인덱싱에 대해 알아보겠습니다.

 

🔻(참고)슬라이싱🔻

 

(파이썬) NumPy 슬라이싱 및 복사, 대각 요소 추출, 고유한 값 리턴하기

이전 글에서  NumPy 의 개별 요소에 액세스하는 방법을 알아보았습니다. 이번 글에서는 ndarray의 일부분에 액세스하는 방법인 슬라이싱에 대해 알아보겠습니다. 🔻(참고)넘파이 인덱싱🔻 (파이

life-of-nomad.tistory.com

 

1. 부울 값 인덱싱

X = np.arange(25).reshape(5, 5)
print('Original X = \n', X)
>>> Original X = [[ 0 1 2 3 4]  
                [ 5 6 7 8 9]  
                [10 11 12 13 14]  
                [15 16 17 18 19]  
                [20 21 22 23 24]]

print('The elements in X that are greater than 10:', X[X > 10])
print('The elements in X that less than or equal to 7:', X[X <= 7])
print('The elements in X that are between 10 and 17:', X[(X > 10) & (X < 17)])
>>> The elements in X that are greater than 10: [11 12 13 14 15 16 17 18 19 20 21 22 23 24] 
    The elements in X that less than or equal to 7: [0 1 2 3 4 5 6 7] 
    The elements in X that are between 10 and 17: [11 12 13 14 15 16]

# We use Boolean indexing to assign the elements that are between 10 and 17 the value of -1
X[(X > 10) & (X < 17)] = -1
print('X = \n', X)
>>> X = [[ 0 1 2 3 4]  
        [ 5 6 7 8 9]  
        [10 -1 -1 -1 -1]  
        [-1 -1 17 18 19]  
        [20 21 22 23 24]]

 

2. 집합 연산

  • 또한, 집합 연산을 사용할 수 있습니다. 두  ndarray들의 공통 요소를 찾으려는 경우 유용합니다.
x = np.array([1, 2, 3, 4, 5])
y = np.array([6, 7, 2, 8, 4])

print('x = ', x)
print('y = ', y)
>>> x = [1 2 3 4 5]
	y = [6 7 2 8 4]	
    
print('The elements that are both in x and y:', np.intersect1d(x,y))
print('The elements that are in x that are not in y:', np.setdiff1d(x,y))
print('All the elements of x and y:', np.union1d(x,y))
>>> The elements that are both in x and y: [2 4] 
    The elements that are in x that are not in y: [1 3 5] 
    All the elements of x and y: [1 2 3 4 5 6 7 8]

 

3. numpy.ndarray.sort 메소드

nparray.sort(axis=-1, kind=None, order=None)
  • 위의 메소드는 원본 배열을 정렬합니다. 모든 인수는 선택사항입니다.
  • 앞에서 살펴본 다른 함수들과 마찬가지로, sort는 함수 뿐만 아니라 메소드로도 사용할 수 있습니다.
  • 이 경우, 차이점은 데이터가 메모리에 저장되는 방식입니다.
    • numpy.sort()를 함수로써 사용하면 ndarray는 다른 곳에서 정렬됩니다. 즉, 원본 ndarray를 변경하여 정렬하지 않습니다.
    • numpy.ndarray.sort()를 메소드로써 사용하면 ndarray.sort()는 원본 ndarray를 정렬합니다. 즉, 원본 배열이 정렬된 배열로 변경됩니다.

1) sort() 함수로 1차원 배열 정렬하기

x = np.random.randint(1, 11, size=(10, ))
print('Original x = ', x)
>>> Original x = [9 6 4 4 9 4 8 4 4 7]

print('Sorted x (out of place):', np.sort(x))
>>> Sorted x (out of place): [4 4 4 4 4 6 7 8 9 9]

print('x after sorting:', x)
>>> x after sorting: [9 6 4 4 9 4 8 4 4 7]
  • np.sort() 는 배열을 정렬하지만 반복된 값들이 있으면 그 값들을 정렬된 배열에 남깁니다. 
  • 원한다면 unique()함수를 사용할 수도 있습니다.
print(np.unique(x))
>>> [4 6 7 8 9]

2) sort() 메소드로 1차원 배열 정렬하기

x = np.random.randint(1,11,size=(10,))
print('Original x = ', x)
>>> Original x = [9 9 8 1 1 4 3 7 2 8]

x.sort()
print('x after sorting:', x)
>>> x after sorting: [1 1 2 3 4 7 8 8 9 9]

3) sort 함수로 2차원 배열 정렬하기

numpy.sort(array, axis=-1, kind=None, order=None)
  • 이 구문은 정렬된 배열 사본을 리턴합니다.
  • axis 는 정렬하는 축을 나타내고 -1부터 (ndim-1)까지의 범위에 있는 값들을 취할 수 있습니다. 
  • 축은 주어진 2차원 ndarray에서 다음과 같은 값들을 취할 수 있습니다. 
    • 값을 지정하지 않으면 기본값은 axis = -1 입니다. 마지막 축을 따라 정렬합니다. 
    • axis = None이라고 지정하면 1차원 배열을 리턴하게 됩니다.
    • axis = 0 이라고 지정하면, 함수는 다른 요소에 영향을 미치지 않고 한 번에 한 열씩 모든 행을 정렬합니다. 즉, 각각의 열이 개별적으로 정렬됩니다. (세로,위 아래)
    • axis = 1의 출력 결과는 axis = 0 일 때와 반대입니다. 각각의 행이 개별적으로 정렬됩니다. (가로, 좌 우)
X = np.random.randint(1,11,size=(5,5))
print('Original X = \n', X)
>>> Original X = 
               [[6 1 7 6 3]   
                [3 9 8 3 5]   
                [6 5 8 9 3]   
                [2 1 5 7 7]   
                [9 8 1 9 8]]
                
print('X with sorted columns :\n', np.sort(X, axis = 0))
>>> X with sorted columns : 
                 [[2 1 1 3 3]   
                 [3 1 5 6 3]   
                 [6 5 7 7 5]   
                 [6 8 8 9 7]   
                 [9 9 8 9 8]]
                 
print('X with sorted rows :\n', np.sort(X, axis = 1))
>>> X with sorted rows : 
                 [[1 3 6 6 7]   
                 [3 3 5 8 9]   
                 [3 5 6 8 9]   
                 [1 2 5 7 7]   
                 [1 8 8 9 9]]
728x90
반응형