Мне нужно написать функцию, которая будет определять, содержит ли вход хотя бы одно нечисловое значение. Если будет найдено нечисловое значение, я вызову ошибку (поскольку расчет должен возвращать только числовое значение). Количество измерений входного массива заранее не известно - функция должна выдавать правильное значение независимо от ndim. В качестве дополнительного усложнения входные данные могут быть одним числом с плавающей запятой numpy.float64
или даже чем-то необычным, например, нулевым массивом.
Очевидный способ решить эту проблему - написать рекурсивную функцию, которая выполняет итерацию по каждому итерируемому объекту в массиве, пока не найдет не повторяющийся. Он будет применять 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
contains_nan
выглядит подозрительно: «Возвращает false, если существует хотя бы одно нечисловое значение». Я ожидал,contains_nan
что вернусь,True
если массив содержит NaN.