Como usar numpy com valor 'Nenhum' em Python?
Pergunta
Eu gostaria de calcular a média de uma matriz em Python nesta forma:
Matrice = [1, 2, None]
Eu só gostaria de ter o meu valor None
ignorado pelo cálculo numpy.mean
mas eu não consigo descobrir como fazê-lo.
Solução
Você está procurando mascarado matrizes . Aqui está um exemplo.
import MA
a = MA.array([1, 2, None], mask = [0, 0, 1])
print "average =", MA.average(a)
Infelizmente, as matrizes mascarados não são totalmente suportados no numpy, então você tem que olhar ao redor para ver o que pode eo que não pode ser feito com eles.
Outras dicas
Você pode usar scipy para isso:
import scipy.stats.stats as st
m=st.nanmean(vec)
não usei numpy, mas em python padrão que você pode filtrar None
usando compreensões lista
ou a função de filtro
>>> [i for i in [1, 2, None] if i != None]
[1, 2]
>>> filter(lambda x: x != None, [1, 2, None])
[1, 2]
e, em seguida, em média, o resultado de ignorar a None
Você também pode ser capaz de kludge com valores como NaN ou 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])
Na verdade, ele pode até não ser um truque. Wikipedia diz :
NaNs pode ser usado para representar valores ausentes em cálculos.
Na verdade, isso não funciona para a função média (), embora, por isso deixa pra lá. :)
In [20]: mean([1, 2, NaN])
Out[20]: nan
Você também pode usar o filtro, passe Nenhum para ele, ele vai filtrar objetos não verdadeiros, também 0,: D Então, usá-lo quando você não precisa 0 também.
>>> filter(None,[1, 2, None])
[1, 2]
Você pode 'upcast' a matriz para dtipo float64 de numpy e, em seguida, usar o método nanmean de numpy como no exemplo a seguir:
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])