입력에 숫자가 아닌 값이 하나 이상 포함되어 있는지 감지하는 함수를 작성해야합니다. 숫자가 아닌 값이 발견되면 오류가 발생합니다 (계산은 숫자 값만 반환해야하기 때문). 입력 배열의 차원 수는 미리 알 수 없습니다. 함수는 ndim에 관계없이 올바른 값을 제공해야합니다. 추가 복잡함으로 입력은 단일 플로트 또는 numpy.float64
0 차원 배열과 같은 이상한 무언가 일 수 있습니다 .
이 문제를 해결하는 확실한 방법은 비 iterabe를 찾을 때까지 배열의 모든 반복 가능한 객체를 반복하는 재귀 함수를 작성하는 것입니다. numpy.isnan()
반복 불가능한 모든 객체에 함수를 적용 합니다. 숫자가 아닌 값이 하나 이상 발견되면 함수는 즉시 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
array(['None', 'None'], dtype=object)
어떻습니까? 이러한 입력이 예외를 발생시켜야합니까?
float('nan') in x
. 작동하지 않습니다.
contains_nan
이 의심스러워 보입니다. "숫자가 아닌 값이 하나 이상있는 경우 false를 반환합니다." 배열에 NaN이 포함되어 있으면contains_nan
반환True
할 것으로 예상했을 것 입니다.