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

Posted

技术标签:

【中文标题】如何在 Python 中使用带有“None”值的 numpy?【英文标题】:How to use numpy with 'None' value in Python? 【发布时间】:2010-11-01 00:45:57 【问题描述】:

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

Matrice = [1, 2, None]

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

【问题讨论】:

+1:这个问题可能与从数据库导入的数组特别相关,其中值有时可能为 NULL。 【参考方案1】:

您正在寻找masked arrays。这是一个例子。

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

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

【讨论】:

一个很有帮助的成员函数是filled。将掩码数组恢复为正常数组,填充一个我认为无效的值(NaN,-9999,无论您的用户需要什么)。 掩码数组的性能也明显低于常规 numpy 数组,因为实现是纯 Python。如果您正在处理大数据,请注意性能影响。 使用 numpy.nanmean 比在 numpy 之外寻找临时解决方案更好;请参阅下面的答案。 掩码数组不是临时的,也不是在 numpy 之外。我的答案中的文档链接显示了这一点。【参考方案2】:

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

【讨论】:

x != None 通常写成 x is not None(PEP 8:“与 None 之类的单例的比较应始终使用 'is' 或 'is not' 来完成,而不是相等运算符。”)跨度> 【参考方案3】:

你可以使用 scipy:

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

【讨论】:

谢谢,这正是我所需要的! 这不起作用。 a = [1,2,None] 然后 st.nanmean(a) 导致 TypeError。 是的,你是对的,它适用于 numpy.nan,而不适用于 None。在计算 numpy 向量的平均值时最有用。 现在你也可以使用 numpy.nanmean【参考方案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])

实际上,它甚至可能不是一个杂物。 Wikipedia says:

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

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

In [20]: mean([1, 2, NaN])
Out[20]: nan

【讨论】:

实际上,mean(a[~isnan(a)]) 明确选择所有非 NaN 值是可行的。【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于如何在 Python 中使用带有“None”值的 numpy?的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中使用 panda 库和 Dash Plotly 创建带有标签和值的下拉菜单

如何使用带有编解码器值的 python .replace 来删除特殊字符?

带有自我值的python字典函数调用

我们如何在 Z 轴 python 上绘制带有频率值的曲面图

如何在包含浮点数和 Nan 或 None 值的同一列中舍入浮点值?

如何在 Python 中使用管道分隔符拆分文本文件,然后使列数等于属性值的数量?