Мне нужно написать функцию, которая будет определять, содержит ли вход хотя бы одно значение, которое не является числовым. Если обнаружено нечисловое значение, я подниму ошибку (потому что вычисление должно возвращать только числовое значение). Количество измерений входного массива неизвестно заранее - функция должна давать правильное значение независимо от ndim. В качестве дополнительного усложнения вход может быть одним поплавком или numpy.float64
или даже чем-то странным, как нулевой размерный массив.Определить, содержит ли массив NumPy хотя бы одно нечисловое значение?
Очевидным способом решения этой проблемы является запись рекурсивной функции, которая выполняет итерацию по каждому истребимому объекту в массиве до тех пор, пока не найдет не итерабельность. Он будет применять функцию numpy.isnan()
для каждого объекта без итераций. Если найдено хотя бы одно нечисловое значение, функция немедленно вернет 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' выглядит подозрительно:«Возвращает ложь, если по крайней мере один нечисловое значение существует». Я бы ожидал, что 'contains_nan' вернет' True', если массив содержит NaN. –
Что касается входов, таких как 'array (['None', 'None'], dtype = object)'? Должен ли такой ввод просто поднять исключение? –
НЕ используйте 'float ('nan') в x'. Это не работает. –