我有一个问题,在最后几天困扰我很多。我想平均不同的蒙版数组,但似乎我不能,因为我的映射数组没有相同的地图模式。
例如。我有三个阵列:
[ -- -- --]
[ 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 :(得分: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)