在python中平均多个蒙版的numpy数组

时间:2014-11-14 13:40:27

标签: python arrays numpy

我有一个问题,在最后几天困扰我很多。我想平均不同的蒙版数组,但似乎我不能,因为我的映射数组没有相同的地图模式。

例如。我有三个阵列:

 [ --  --  --]
 [ 1.  2.  --]
 [ 2.  3.  --]
 [ --  --  --]

 [ --  2.  2.]
 [ --  2.  3.]
 [ --  --  --]
 [ --  --  --]

 [ 2   1.  --]
 [ 1   1.  --]
 [ --  --  --]
 [ --  --  --]

我希望结果是这些数组的平均值,但是带有有效元素的屏蔽元素的平均值不应该考虑屏蔽元素。这意味着在(0,0)位置我有两个屏蔽元素和一个有效(值= 2),因此最终结果应该只计算有效元素的平均值。

 [ 2   1.5  2]
 [ 1   2    3]
 [ 2   --  --]
 [ --  --  --]

我有28个像我们想要组合的数组,到目前为止,我必须做复杂的循环和动作才能达到预期的效果。有没有有效的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以将它们转换为3-D蒙版数组,然后沿axis=0取平均值,例如:

np.ma.array((a, b, c)).mean(axis=0)

示例:

import numpy as np

a = np.ma.array([[99, 99, 99],
                 [ 1.,  2., 99],
                 [ 2.,  3., 99],
                 [99, 99, 99]],
                 mask=[[True, True, True],
                       [False, False, True],
                       [False, False, True],
                       [True, True, True]])
b = np.ma.array([[99,  2.,  2.],
                 [99,  2.,  3.],
                 [99, 99, 99],
                 [99, 99, 99]],
                 mask=[[True, False, False],
                       [True, False, False],
                       [True, True, True],
                       [True, True, True]])
c = np.ma.array([[2., 1., 99],
                 [1., 1., 99],
                 [99, 99, 99],
                 [99, 99, 99]],
                 mask=[[False, False, True],
                       [False, False, True],
                       [True, True, True],
                       [True, True, True]])

np.ma.array((a, b, c)).mean(axis=0)

masked_array(data =
 [[2.0 1.5 2.0]
 [1.0 1.6666666666666667 3.0]
 [2.0 3.0 --]
 [-- -- --]],
             mask =
 [[False False False]
 [False False False]
 [False False  True]
 [ True  True  True]],
       fill_value = 1e+20)