Come utilizzare NumPy con valore 'None' in Python?
Domanda
Mi piacerebbe calcolare la media di un array in Python in questa forma:
Matrice = [1, 2, None]
Vorrei solo avere il mio valore None
ignorato dal calcolo numpy.mean
ma non riesco a capire come farlo.
Soluzione
Siete alla ricerca di mascherato array . Ecco un esempio.
import MA
a = MA.array([1, 2, None], mask = [0, 0, 1])
print "average =", MA.average(a)
Purtroppo, gli array mascherati non sono completamente supportate in NumPy, quindi hai avuto modo di guardarsi intorno per vedere che cosa può e non può essere fatto con loro.
Altri suggerimenti
È possibile utilizzare SciPy per questo:
import scipy.stats.stats as st
m=st.nanmean(vec)
Non ho usato NumPy, ma in Python standard potete filtrare None
utilizzando list comprehension
o la funzione di filtro
>>> [i for i in [1, 2, None] if i != None]
[1, 2]
>>> filter(lambda x: x != None, [1, 2, None])
[1, 2]
e poi mediare il risultato di ignorare il None
Si potrebbe anche essere in grado di kludge con valori come NaN o Inf.
In [1]: array([1, 2, None])
Out[1]: array([1, 2, None], dtype=object)
In [2]: array([1, 2, NaN])
Out[2]: array([ 1., 2., NaN])
In realtà, potrebbe anche non essere un kludge. Wikipedia dice :
NaNs possono essere utilizzati per rappresentare i valori mancanti nei calcoli.
In realtà, questo non funziona per la funzione media (), però, così non importa. :)
In [20]: mean([1, 2, NaN])
Out[20]: nan
È inoltre possibile utilizzare il filtro, passare Nessuno per esso, sarà filtrare gli oggetti non veri, anche 0,: D Così, usarlo quando non avete bisogno 0 troppo.
>>> filter(None,[1, 2, None])
[1, 2]
Si puo 'upcast' la matrice per DTYPE float64 di NumPy e quindi utilizzare il metodo di nanmean numpy come nel seguente esempio:
import numpy as np
arr = [1,2,3, None]
arr2 = np.array(arr, dtype=np.float64)
print(arr2) # [ 1. 2. 3. nan]
print(np.nanmean(arr2)) # 2.0
np.mean (Matrice [Matrice! = None])