笨拙的蒙面操作

hur*_*ght 3 python arrays numpy

我是python的新用户,在深入了解NumPy模块的工作方式方面我很有趣。我正在写一个能够将掩码和未掩码数组都用作数据输入的函数。我已经注意到,有几个numpy的蒙版操作看起来与普通(非蒙版)对应对象相似(甚至可以工作?)。此类功能之一是numpy.zerosnumpy.ma.zeros。有人可以告诉我使用numpy.ma.zerosvs 创建数组的好处numpy.zeros吗?使用遮罩数组时,它会产生实际的不同吗?我已经注意到,当我使用numpy.zeros_like它时,无论是创建遮罩数组还是未遮罩数组都可以正常工作。

Aza*_*zad 5

np.ma.zeros创建一个掩码数组而不是普通数组,如果此数组上的某些后续操作创建了无效值,这可能会很有用。手册中的一个示例:

数组有时包含无效或丢失的数据。在此类数组上执行操作时,我们希望抑制无效值,这是掩码数组满足的目的(下面提供了典型用法的示例)。

例如,检查以下数组:

>>> x = np.array([2, 1, 3, np.nan, 5, 2, 3, np.nan])
Run Code Online (Sandbox Code Playgroud)

当我们尝试计算数据的均值时,结果不确定:

>>> np.mean(x) nan
Run Code Online (Sandbox Code Playgroud)

均值是使用粗略来计算的np.sum(x)/len(x),但是由于NaN产生物中增加了任何数字NaN,因此不起作用。输入屏蔽的数组:

>>> m = np.ma.masked_array(x, np.isnan(x))
>>> m
masked_array(data = [2.0 1.0 3.0 -- 5.0 2.0 3.0 --],
      mask = [False False False  True False False False  True],
      fill_value=1e+20)
Run Code Online (Sandbox Code Playgroud)

在这里,我们构造了一个屏蔽所有NaN值的掩码数组。现在,我们可以计算其他值的平均值:

>>> np.mean(m)
2.6666666666666665
Run Code Online (Sandbox Code Playgroud)