28

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

Matrice = [1, 2, None]

我只想让我的None值被计算忽略,numpy.mean但我不知道该怎么做。

4

7 回答 7

11

您正在寻找掩码数组。这是一个例子。

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

从上面链接的 numpy 文档中,“numpy.ma 模块为支持带掩码的数据数组的 numpy 提供了几乎类似工作的替代品。”

于 2009-06-07T18:10:31.327 回答
5

没有使用过 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

于 2009-06-07T17:28:06.183 回答
5

您可以为此使用 scipy:

import scipy.stats.stats as st
m=st.nanmean(vec)
于 2011-11-22T22:15:38.557 回答
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])

实际上,它甚至可能不是一个杂物。 维基百科说

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

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

In [20]: mean([1, 2, NaN])
Out[20]: nan
于 2009-12-06T02:26:13.187 回答
2

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

>>> filter(None,[1, 2, None])
[1, 2]
于 2009-12-06T02:30:31.587 回答
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
于 2019-07-30T21:25:39.110 回答
-1

np.mean(矩阵[矩阵!=无])

于 2018-06-06T19:30:01.560 回答