अगर आप सहज हैं Numba यह एक तेज शॉर्ट-सर्किट बनाने की अनुमति देता है (जैसे ही एक 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
इसी तरह के परिणाम साइथन या सी एक्सटेंशन के साथ प्राप्त किए जा सकते हैं, ये थोड़ा अधिक जटिल हैं (या आसानी से avaiable के रूप में bottleneck.anynan) लेकिन अल्टीमेटली मेरे anynanफ़ंक्शन के समान ही करें ।