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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top