Python numpy.unique(), 배열 중복 제거

numpy.unique()는 배열에서 유일한 값만 남기는, 중복 요소를 제거하는 함수입니다.

1. 1차원 배열의 중복 제거

1차원 배열에 대해서 numpy.array(arr)를 호출하면, 중복이 모두 제거된 배열이 리턴됩니다.

import numpy as np

arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
unique_arr = np.unique(arr)

print(unique_arr)

Output:

[1 2 3 4]

2. 2차원 배열의 중복 제거

2차원 배열에 대해서 numpy.unique(arr)을 적용하면, 1차 배열로 평탄화되고 중복된 값이 모두 제거됩니다.

import numpy as np

arr = np.array([[1, 2], [2, 3], [1, 2], [3, 4]])
unique_arr = np.unique(arr)

print(arr)
print(unique_arr)

Output:

[[1 2]
 [2 3]
 [1 2]
 [3 4]]
[1 2 3 4]

2.1 행(Row) 중복 제거

배열의 행(Row)을 비교하여, 동일한 행이 있으면 중복을 제거할 수 있습니다.

  • 2차 배열에서 axis=0은 행을 의미
  • unique(arr, axis=0)는 배열에서 중복 행을 제거
import numpy as np

arr = np.array([[1, 2],
                [2, 3],
                [1, 2],
                [3, 4]])
unique_arr = np.unique(arr, axis=0)

print(arr)
print(unique_arr)

Output:

[[1 2]
 [2 3]
 [1 2]
 [3 4]]
[[1 2]
 [2 3]
 [3 4]]

2.2 열(Column) 중복 제거

배열의 열(Column)을 비교하여, 값이 동일한 열이 있으면 중복을 제거할 수 있습니다.

  • 2차 배열에서 axis=1은 열을 의미
  • unique(arr, axis=1)는 배열에서 중복 열을 제거
import numpy as np

arr = np.array([[1, 2, 1],
                [3, 3, 3],
                [1, 2, 1]])
unique_arr = np.unique(arr, axis=1)

print(arr)
print(unique_arr)

실행 결과를 보면, 2차 배열에서 1열과 3열이 '1, 3, 1' 값을 갖고 있습니다. 하나를 제거합니다. Output:

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

3. 중복 요소 개수 리턴 (return_counts)

아래 예제는 중복을 제거하며, 배열에서 각 요소에 해당하는 값이 몇개씩 있는지 개수를 함께 리턴합니다.

  • return_counts=true 인자 전달 시, 중복 요소 개수도 함께 배열로 리턴
import numpy as np

arr = np.array([1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4])
unique_arr, counts = np.unique(arr, return_counts=True)

print(unique_arr)
print(counts)

실행 결과를 보면, unique_arr의 Index 1은 값이 1이며, 배열에서 이 값의 중복 요소 개수는 counts의 Index 1에 해당하는 값입니다.

[1 2 3 4]
[2 3 2 4]

4. unique 값의 실제 배열 Index 정보 (return_index)

중복이 제거된 unique 값을 얻었을 때, 이 값이 실제 배열에서 어디에 위치해있는지 Index 정보를 가져올 수 있습니다.

  • return_index=true 인자 전달 시, unique 값이 실제 배열에서 위치한 Index를 함께 리턴
import numpy as np

arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
unique_arr, index = np.unique(arr, return_index=True)

print(unique_arr)
print(index)

실행 결과를 보면, unique_arr의 첫번째 요소는 배열에서 Index 0(index[0])에 위치해있습니다.

[1 2 3 4]
[0 1 3 6]

5. 배열 값에 대한 unique_arr의 Index 정보 (return_inverse)

return_index=true를 사용한 것과 반대로, 배열의 실제 값이 리턴되는 unique_arr의 어떤 위치에 있는지 정보를 가져올 수도 있습니다.

  • return_index=true 인자 전달 시, unique 값이 실제 배열에서 위치한 Index를 함께 리턴
import numpy as np

arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
unique_arr, inverse = np.unique(arr, return_inverse=True)

print(unique_arr)
print(inverse)

실행 결과를 보면, inverse의 Index 0의 값은 실제 배열의 첫번째 요소(arr[0])가 unique_arr에 위치한 Index를 의미합니다. Output:

[1 2 3 4]
[0 1 1 2 2 2 3 3 3 3]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha