আপনি যদি আরামদায়ক হন 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
তবে অ্যারেতে যদি কোনও এনএএন থাকে, বিশেষত যদি এটির অবস্থানটি নিম্ন সূচকগুলিতে থাকে তবে এটি আরও দ্রুত:
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
সিথন বা সি এক্সটেনশনের সাথে অনুরূপ ফলাফল অর্জন করা যেতে পারে, এগুলি কিছুটা জটিল (বা সহজেই সহজলভ্য bottleneck.anynan
) তবে আলটিমেটিকভাবে আমার anynan
ফাংশনের মতোই হয় do