python - numpy 中的屏蔽数组运算

标签 python numpy mean

这是我在堆栈溢出上发表的第一篇文章,所以请耐心等待。 当然我尝试在网上寻找答案,但没有成功。

问题:

In [1]: import numpy
In [2]: import numpy.ma as ma
In [4]: a = ma.array([[[1,2],[3,4]],[[1,2],[3,4]]], mask=[[[True,False],[False,False]],[[False,False],[False,True]]])
In [5]: a
Out[5]: 
masked_array(data =
 [[[-- 2]
  [3 4]]

 [[1 2]
  [3 --]]],
             mask =
 [[[ True False]
  [False False]]

 [[False False]
  [False  True]]],
       fill_value = 999999)

In [6]: ma.mean(a, axis=0)
Out[6]: 
masked_array(data =
 [[1.0 2.0]
 [3.0 4.0]],
             mask =
 [[False False]
 [False False]],
       fill_value = 1e+20)

但我希望平均函数返回屏蔽输出,如下所示;

In [7]: (a[0]+a[1])/2
Out[7]: 
masked_array(data =
 [[-- 2]
 [3 --]],
             mask =
 [[ True False]
 [False  True]],
       fill_value = 999999)

我哪里做错了什么?

最佳答案

屏蔽数组忽略屏蔽值,它们传播屏蔽。为了获得您想要的结果,您可以这样做:

>>> np.ma.array(a.data.mean(axis=0), mask=a.mask.any(axis=0))
masked_array(data =
 [[-- 2.0]
 [3.0 --]],
             mask =
 [[ True False]
 [False  True]],
       fill_value = 1e+20)

关于python - numpy 中的屏蔽数组运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32738156/

相关文章:

python - 当列更改 numpy.array 中的值时如何选择第一行

python - 我们如何使用 pandas 生成最小值、最大值、平均值、中位数……作为数据框的新列?

python - 计算一维 numpy 数组中的局部均值

python - 使用 Pyspark-sql 将 unix 时间转换为日期时间的结果不正确

当顺序更改时,Python swap 会导致意外结果

用于提取日期和时间的 Python 字符串解析

python - 根据给定值向 matplotlib 中的线图添加颜色

python - 如何使用 Numpy 将 (1*3) 向量除以 (3*3) 矩阵? a/b 不起作用

python - 在 numba 中实现的 tensordot 算法比 numpy 慢得多

r - 我应该如何计算 R 中的蒙特卡洛均方误差?