다음은 np.unique
보다 빠른 dtype np.uint8
인 배열에서 작동하는 방법입니다.
먼저 작동하는 배열을 생성 : np.unique
를 사용하여 고유 값을 찾은 후에 비교 용
In [128]: a = np.random.randint(1, 128, size=(10, 3000, 3000)).astype(np.uint8)
:
가
In [129]: u = np.unique(a)
여기서 빠른 방법이다; 우리가 같은 결과를 얻었다 것을
In [130]: q = np.zeros(256, dtype=int)
In [131]: q[a.ravel()] = 1
In [132]: v = np.nonzero(q)[0]
확인 : v
는 결과를 포함
In [133]: np.array_equal(u, v)
Out[133]: True
타이밍 :
그래서
In [134]: %timeit u = np.unique(a)
2.86 s ± 9.02 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [135]: %timeit q = np.zeros(256, dtype=int); q[a.ravel()] = 1; v = np.nonzero(q)
300 ms ± 5.52 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
대체 방법 np.unique()
에 2.86 초, 0.3 초 .
(예를 들어, 'a.dtype'은 무엇입니까?)? –
@WarrenWeckesser uint8 – onepint16oz
팬더의 고유 기능이 정렬되지 않으므로 속도가 빠릅니다. 다음을 확인하십시오 : https://pandas.pydata.org/pandas-docs/stable/generated/pandas.unique.html – ayhan