如何在Python中使用具有“None”值的numpy?

问题描述 投票:0回答:7

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

Matrice = [1, 2, None]

我只想让

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

python numpy mean
7个回答
12
投票

您正在寻找屏蔽数组。 这是一个例子。

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

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


7
投票

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


6
投票

您可以使用 scipy 来实现:

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

4
投票

您还可以使用 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

4
投票

您可以将数组“向上转换”为 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

3
投票

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

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

0
投票
np.mean(Matrice[Matrice != None])
© www.soinside.com 2019 - 2024. All rights reserved.