入力に少なくとも1つの非数値の値が含まれているかどうかを検出する関数を記述する必要があります。数値以外の値が見つかった場合は、エラーが発生します(計算では数値のみが返されるため)。入力配列の次元数は事前に分かっていません。関数はndimに関係なく正しい値を与える必要があります。余分な複雑さとして、入力は単一のfloatまたはnumpy.float64
、またはゼロ次元配列のような奇妙なものでもあります。NumPy配列に少なくとも1つの数値以外の値が含まれているかどうかを検出しますか?
これを解決する明白な方法は、iterable以外のものが見つかるまで、配列内のすべての反復可能オブジェクトを反復する反復関数を書くことです。すべての反復不能オブジェクトに対してnumpy.isnan()
関数を適用します。少なくとも1つの数値以外の値が見つかった場合、関数は直ちにFalseを返します。それ以外の場合、iterableのすべての値が数値であれば、結局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
contains_nan' 'のためのあなたの説明が疑わしい:「少なくとも1つの非数値が存在する場合はfalseを返します」。配列にNaNが含まれている場合、 'contains_nan'が' True'を返すと思います。 –
'array([None '、' None ']、dtype = object)'などの入力はどうでしょうか?そのような入力は単に例外を発生させるべきでしょうか? –
'x 'に' float(' nan ')を使用しないでください。それは動作しません。 –