Мне нужно написать функцию, которая будет определять, содержит ли вход хотя бы одно значение, которое не является числовым. Если обнаружено нечисловое значение, я подниму ошибку (потому что вычисление должно возвращать только числовое значение). Количество измерений входного массива неизвестно заранее - функция должна давать правильное значение независимо от ndim. В качестве дополнительного усложнения вход может быть одним поплавком или numpy.float64
или даже чем-то странным, как нулевой размерный массив.
Очевидным способом решения этой проблемы является запись рекурсивной функции, которая выполняет итерацию по каждому истребимому объекту в массиве до тех пор, пока не найдет не итерабельность. Он будет применять функцию numpy.isnan()
для каждого неистребимого объекта. Если найдено хотя бы одно нечисловое значение, функция немедленно вернет False. В противном случае, если все значения в iterable являются числовыми, он в конечном итоге вернет True.
Это работает отлично, но это довольно медленно, и я ожидаю, что NumPy имеет гораздо лучший способ сделать это. Что такое альтернатива, которая быстрее и более numpyish?
Вот мой макет:
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