我想以这种形式计算 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
您也可以使用过滤器,将 None 传递给它,它将过滤非 True 对象,也是 0,:D 所以,当您不需要 0 时也可以使用它。
>>> filter(None,[1, 2, None])
[1, 2]
您可以将数组“向上转换”为 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
np.mean(矩阵[矩阵!=无])