入力に数値以外の値が少なくとも 1 つ含まれているかどうかを検出する関数を作成する必要があります。数値以外の値が見つかった場合は、エラーが発生します (計算は数値のみを返す必要があるため)。入力配列の次元数は事前にわかりません。関数は、ndim に関係なく正しい値を与える必要があります。さらに複雑なことに、入力は単一の float であったりnumpy.float64
、0 次元配列のような変わったものであったりします。
これを解決する明白な方法は、再帰関数を記述して、配列内のすべての反復可能なオブジェクトを、非イテラーベが見つかるまで反復することです。numpy.isnan()
すべての反復不可能なオブジェクトに関数を適用します。少なくとも 1 つの数値以外の値が見つかった場合、関数はすぐに False を返します。それ以外の場合、反復可能オブジェクトのすべての値が数値の場合、最終的に True が返されます。
それは問題なく動作しますが、かなり遅いので、NumPyにはもっと良い方法があると思います。より高速でより派手な代替手段は何ですか?
これが私のモックアップです:
def contains_nan( myarray ):
"""
@param myarray : An n-dimensional array or a single float
@type myarray : numpy.ndarray, numpy.array, float
@returns: bool
Returns true if myarray is numeric or only contains numeric values.
Returns false if at least one non-numeric value exists
Not-A-Number is given by the numpy.isnan() function.
"""
return True