あなたが快適なら 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
CythonまたはC拡張機能でも同様の結果が得られる可能性があります。これらは少し複雑です(またはとして簡単に利用できますbottleneck.anynan
)が、最終anynan
的には私の機能と同じです。