[PYTHON] 정렬없이 numpy 고유 [중복]
PYTHON정렬없이 numpy 고유 [중복]
결과를 정렬하지 않고 numpy 고유를 어떻게 사용할 수 있습니까? 순서대로 나타납니다. 이 같은?
a = [4,2,1,3,1,2,3,4]
np.unique (a) = [4,2,1,3]
오히려
np.unique (a) = [1,2,3,4]
순진한 솔루션을 사용하여 간단한 기능을 작성하는 것이 좋습니다. 하지만이 작업을 여러 번 수행해야하므로이 작업을 수행하는 빠르고 깔끔한 방법이 있습니까?
해결법
-
==============================
1.return_index 매개 변수를 사용하여이 작업을 수행 할 수 있습니다.
return_index 매개 변수를 사용하여이 작업을 수행 할 수 있습니다.
>>> import numpy as np >>> a = [4,2,1,3,1,2,3,4] >>> np.unique(a) array([1, 2, 3, 4]) >>> indexes = np.unique(a, return_index=True)[1] >>> [a[index] for index in sorted(indexes)] [4, 2, 1, 3]
-
==============================
2.이와 같이 numpy를 사용하면 이렇게 할 수 있습니다. mergsort가 안정적이므로 각 값의 첫 번째 또는 마지막 항목을 선택할 수 있습니다.
이와 같이 numpy를 사용하면 이렇게 할 수 있습니다. mergsort가 안정적이므로 각 값의 첫 번째 또는 마지막 항목을 선택할 수 있습니다.
def unique(array, orderby='first'): array = np.asarray(array) order = array.argsort(kind='mergesort') array = array[order] diff = array[1:] != array[:-1] if orderby == 'first': diff = np.concatenate([[True], diff]) elif orderby == 'last': diff = np.concatenate([diff, [True]]) else: raise ValueError uniq = array[diff] index = order[diff] return uniq[index.argsort()]
이 답변은 다음과 매우 유사합니다.
def unique(array): uniq, index = np.unique(array, return_index=True) return uniq[index.argsort()]
그러나 numpy.unique는 내부적으로 불안정한 정렬을 사용하므로 특정 인덱스, 즉 처음 또는 마지막을 보장 할 수는 없습니다.
주문한 dict도 작동한다고 생각합니다.
def unique(array): uniq = OrderedDict() for i in array: uniq[i] = 1 return uniq.keys()
from https://stackoverflow.com/questions/12926898/numpy-unique-without-sort by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 숫자에 합쳐지는 모든 숫자 얻기 (0) | 2018.11.07 |
---|---|
[PYTHON] 결말이없는 파이프에서 어떻게 파이썬으로 stdin을 읽는가? (0) | 2018.11.07 |
[PYTHON] OpenCV Python API 용 FileStorage (0) | 2018.11.07 |
[PYTHON] Mac OS X 10.10.2에서 python six 패키지를 업그레이드 할 수 없습니다. (0) | 2018.11.07 |
[PYTHON] 코드 효율성 향상 : 슬라이딩 윈도우의 표준 편차 (0) | 2018.11.07 |