如何在Python中使用numpy和'None'值?

时间:2009-06-07 17:21:44

标签: python numpy mean

我想以这种形式计算Python中数组的平均值:

Matrice = [1, 2, None]

我只想通过None计算忽略numpy.mean值,但我无法弄明白该怎么做。

7 个答案:

答案 0 :(得分:11)

您正在寻找masked arrays。这是一个例子。

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

不幸的是,numpy并不完全支持蒙面数组,所以你必须环顾四周才能看到它们可以做什么和不能做什么。

答案 1 :(得分:6)

你可以使用scipy:

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

答案 2 :(得分:3)

没有使用numpy,但在标准python中,您可以使用列表推导过滤掉None  或过滤功能

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

然后平均结果以忽略None

答案 3 :(得分:3)

您也可以使用NaN或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])

实际上,它甚至可能不是一个kludge。 Wikipedia says

  

NaNs可用于表示计算中的缺失值。

实际上,这对于mean()函数不起作用,所以没关系。 :)

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

答案 4 :(得分:2)

您也可以使用过滤器,将None传递给它,它将过滤非True对象,也是0,:D 所以,当你不需要0时使用它。

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

答案 5 :(得分:0)

您可以将数组“转换”为numpy的float64 dtype,然后使用numpy的nanmean方法,如以下示例所示:

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

答案 6 :(得分:-1)

np.mean(Matrice [Matrice!= None])