당신이 편안하다면 누바 빠른 단락 (NaN이 발견되는 즉시 중지) 기능을 생성 할 수 있습니다.
import numba as nb
import math
@nb.njit
def anynan(array):
array = array.ravel()
for i in range(array.size):
if math.isnan(array[i]):
return True
return False
NaN
함수가 실제로 더 느릴 수 없다면 큰 배열에 다중 처리를 사용 np.min
하기 때문이라고 생각 np.min
합니다.
import numpy as np
array = np.random.random(2000000)
%timeit anynan(array) # 100 loops, best of 3: 2.21 ms per loop
%timeit np.isnan(array.sum()) # 100 loops, best of 3: 4.45 ms per loop
%timeit np.isnan(array.min()) # 1000 loops, best of 3: 1.64 ms per loop
그러나 배열에 NaN이있는 경우, 특히 위치가 낮은 인덱스에 있으면 훨씬 빠릅니다.
array = np.random.random(2000000)
array[100] = np.nan
%timeit anynan(array) # 1000000 loops, best of 3: 1.93 µs per loop
%timeit np.isnan(array.sum()) # 100 loops, best of 3: 4.57 ms per loop
%timeit np.isnan(array.min()) # 1000 loops, best of 3: 1.65 ms per loop
Cython 또는 C 확장을 사용하여 유사한 결과를 얻을 수 있습니다. 이들은 조금 더 복잡하거나 (또는 쉽게 사용할 수 있음 bottleneck.anynan
) 내 anynan
기능 과 동일한 작업을 수행합니다 .