我想以这种形式计算 Python 中数组的平均值:
Matrice = [1, 2, None]
我只想让
None
计算忽略我的 numpy.mean
值,但我不知道该怎么做。
您正在寻找屏蔽数组。 这是一个例子。
import numpy.ma as ma
a = ma.array([1, 2, None], mask = [0, 0, 1])
print "average =", ma.average(a)
从上面链接的 numpy 文档中,“numpy.ma 模块提供了几乎与 numpy 类似的替代品,支持带掩码的数据数组。”
没有使用过 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
您可以使用 scipy 来实现:
import scipy.stats.stats as st
m=st.nanmean(vec)
您还可以使用 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])
实际上,这甚至可能不是一个拼凑。 维基百科说:
NaN 可用于表示计算中的缺失值。
实际上,这对于mean()函数不起作用,所以没关系。 :)
In [20]: mean([1, 2, NaN])
Out[20]: nan
您可以将数组“向上转换”为 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
你也可以使用filter,传递None给它,它会过滤非True对象,也是0,:D 所以,当你也不需要 0 时使用它。
>>> filter(None,[1, 2, None])
[1, 2]
np.mean(Matrice[Matrice != None])