Question

I'd like to calculate the mean of an array in Python in this form:

Matrice = [1, 2, None]

I'd just like to have my None value ignored by the numpy.mean calculation but I can't figure out how to do it.

Was it helpful?

Solution

You are looking for masked arrays. Here's an example.

import MA
a = MA.array([1, 2, None], mask = [0, 0, 1])
print "average =", MA.average(a)

Unfortunately, masked arrays aren't thoroughly supported in numpy, so you've got to look around to see what can and can't be done with them.

OTHER TIPS

You can use scipy for that:

import scipy.stats.stats as st
m=st.nanmean(vec)

haven't used numpy, but in standard python you can filter out None using list comprehensions or the filter function

>>> [i for i in [1, 2, None] if i != None]
[1, 2]
>>> filter(lambda x: x != None, [1, 2, None])
[1, 2]

and then average the result to ignore the None

You might also be able to kludge with values like NaN or 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])

Actually, it might not even be a kludge. Wikipedia says:

NaNs may be used to represent missing values in computations.

Actually, this doesn't work for the mean() function, though, so nevermind. :)

In [20]: mean([1, 2, NaN])
Out[20]: nan

You can also use filter, pass None to it, it will filter non True objects, also 0, :D So, use it when you dont need 0 too.

>>> filter(None,[1, 2, None])
[1, 2]

You can 'upcast' the array to numpy's float64 dtype and then use numpy's nanmean method as in the following example:

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top