Necesito escribir una función que detecte si la entrada contiene al menos un valor que no sea numérico. Si se encuentra un valor no numérico, generaré un error (porque el cálculo solo debe 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 complicación adicional, la entrada podría ser un solo flotador numpy.float64o incluso algo extraño como una matriz de dimensión cero.
La forma obvia de resolver esto es escribir una función recursiva que itera sobre cada objeto iterable en la matriz hasta que encuentra un no iterabe. Aplicará la numpy.isnan()función 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 del 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 numpyish?
Aquí está 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
array(['None', 'None'], dtype=object)? ¿Debería tal entrada generar una excepción?
float('nan') in x. No funciona.
contains_nanparece sospechosa: "Devuelve falso si existe al menos un valor no numérico". Hubiera esperadocontains_nanregresarTruesi la matriz contiene NaN.