我想以这种形式计算Python中数组的平均值:
Matrice = [1, 2, None]
我只想通过None
计算忽略numpy.mean
值,但我无法弄明白该怎么做。
答案 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])