How to use numpy with 'None' value in Python?
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.
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])