Necesito escribir una función que detectará si la entrada contiene al menos un valor que no es numérico. Si se encuentra un valor no numérico, generaré un error (porque el cálculo solo debería devolver un valor numérico). El número de dimensiones de la matriz de entrada no se conoce de antemano: la función debe dar el valor correcto independientemente de ndim. Como una complicación adicional, la entrada podría ser un flotador simple o numpy.float64
o incluso algo extraño como una matriz de dimensión cero.¿Detecta si una matriz NumPy contiene al menos un valor no numérico?
La forma obvia de resolver esto es escribir una función recursiva que itere sobre cada objeto iterable en la matriz hasta que encuentre un no-iterabe. Aplicará la función numpy.isnan()
sobre cada objeto no iterable. Si se encuentra al menos un valor no numérico, la función devolverá False inmediatamente. De lo contrario, si todos los valores en iterable son numéricos, eventualmente devolverá True.
Eso funciona bien, pero es bastante lento y espero que NumPy tenga una forma mucho mejor de hacerlo. ¿Cuál es una alternativa que es más rápida y más numpyish?
Aquí es mi maqueta:
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
Su descripción de 'contains_nan' parece sospechoso: "Devuelve false si existe al menos un valor no numérico". Hubiera esperado que 'contains_nan' devolviera' True' si la matriz contiene NaN. –
¿Qué pasa con las entradas tales como 'array (['None', 'None'], dtype = object)'? ¿Debería tal entrada solo generar una excepción? –
NO use 'float ('nan') en x'. No funciona. –