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.

È stato utile?

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])

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top