在python中平均多个屏蔽numpy数组

在python中平均多个屏蔽numpy数组,python,arrays,numpy,Python,Arrays,Numpy,在过去的几天里,我遇到了一个困扰我的问题。我想平均不同的屏蔽数组,但似乎不行,因为我的映射数组没有相同的映射模式 比如说。我有三个阵列: [ -- -- --] [ 1. 2. --] [ 2. 3. --] [ -- -- --] [ -- 2. 2.] [ -- 2. 3.] [ -- -- --] [ -- -- --] [ 2 1. --] [ 1 1. --] [ -- -- --] [ -- -- --]

在过去的几天里,我遇到了一个困扰我的问题。我想平均不同的屏蔽数组,但似乎不行,因为我的映射数组没有相同的映射模式

比如说。我有三个阵列:

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

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

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

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

我有28个类似的数组,我想组合它们,到目前为止,我必须执行复杂的循环和操作,以实现预期的结果。有什么有效的方法吗?

您可以将它们转换为三维掩蔽阵列,然后沿
轴=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]])
以及:


不起作用?所有数组的大小都相同。很抱歉,在数组1中出错。@Evert No它不起作用,当我尝试时,例如:(array1+array2+array3)。mean(axis=0)然后我只得到每个数组中有效元素的平均值。当然它起作用;你只需要采取中间步骤,就像索洛在下面解释的那样。谢谢索洛!这正是我想要的:)@Numby不客气,别忘了你可以投票表决答案;)
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)