Eu preciso escrever uma função que detectará se a entrada contém pelo menos um valor que não é numérico. Se um valor não numérico for encontrado, levantarei um erro (porque o cálculo deve retornar apenas um valor numérico). O número de dimensões da matriz de entrada não é conhecido com antecedência - a função deve fornecer o valor correto independentemente de ndim. Como complicação extra, a entrada pode ser um único float numpy.float64ou mesmo algo estranho como um array de dimensão zero.
A maneira óbvia de resolver isso é escrever uma função recursiva que itera sobre cada objeto iterável na matriz até encontrar um não iterável. Vai aplicar onumpy.isnan() função a todos os objetos não iteráveis. Se pelo menos um valor não numérico for encontrado, a função retornará False imediatamente. Caso contrário, se todos os valores no iterável forem numéricos, ele eventualmente retornará True.
Isso funciona muito bem, mas é muito lento e espero que o NumPy tenha uma maneira muito melhor de fazer isso. Qual alternativa é mais rápida e entorpecente?
Aqui está minha maquete:
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)? Essa entrada deve apenas gerar uma exceção?
float('nan') in x. Não funciona.
contains_nanparece suspeita: "Retorna falso se houver pelo menos um valor não numérico". Eu teria esperadocontains_nanretornarTruese a matriz contivesse NaN.