Ho bisogno di scrivere una funzione che rilevi se l'input contiene almeno un valore che non è numerico. Se viene rilevato un valore non numerico, verrà generato un errore (poiché il calcolo deve restituire solo un valore numerico). Il numero di dimensioni della matrice di input non è noto in anticipo - la funzione dovrebbe fornire il valore corretto indipendentemente da ndim. Come ulteriore complicazione, l'input potrebbe essere un singolo float o numpy.float64
o anche qualcosa di strano come un array a dimensione zero.Rileva se una matrice NumPy contiene almeno un valore non numerico?
Il modo ovvio per risolvere questo è scrivere una funzione ricorsiva che itera su ogni oggetto iterabile dell'array fino a quando non trova una non-iterabe. Applicherà la funzione numpy.isnan()
su ogni oggetto non iterable. Se viene trovato almeno un valore non numerico, la funzione restituirà False immediatamente. Altrimenti se tutti i valori nel iterabile sono numerici, alla fine restituirà True.
Che funziona bene, ma è piuttosto lento e mi aspetto che NumPy abbia un modo molto migliore per farlo. Qual è un'alternativa più veloce e più numpy?
Ecco la mia mockup:
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
tua descrizione per 'contains_nan' sembra sospetto: "Restituisce false se esiste almeno un valore non numerico". Mi sarei aspettato che 'contains_nan' restituisse' True' se la matrice contiene NaN. –
Che dire di input come 'array (['None', 'None'], dtype = object)'? Questo input dovrebbe sollevare un'eccezione? –
NON usare 'float ('nan') in x'. Non funziona. –