我的问题有两个方面
首先,假设我有两个numpy数组,它们被部分屏蔽
array_old
[[-- -- -- --]
[10 11 -- --]
[12 14 -- --]
[-- -- 17 --]]
array_update
[[-- 5 -- --]
[-- -- 9 --]
[-- 15 8 13]
[-- -- 19 16]]
如何创建一个新数组,其中所有非屏蔽值都会更新或修改,如:
array_new
[[-- 5 -- --]
[10 11 9 --]
[12 15 8 13]
[-- -- 19 16]]
其次
如果可能,如何在3d numpy阵列中执行上述操作?
更新:
对于第二部分,现在我使用For循环,使用
@freidrichen
方法如下:
array = np.ma.masked_equal([[[0, 0, 0, 0], [10, 11, 0, 0], [12, 14, 0, 0], [0, 0, 17, 0]],[[0, 5, 0, 0], [0, 0, 9, 0], [0, 15, 8, 13], [0, 0, 19, 16]],[[0, 0, 0, 0], [5, 0, 0, 13], [8, 14, 0, 0], [0, 0, 17, 0]],[[6, 7, 8, 9], [0, 0, 0, 0], [0, 0, 0, 21], [0, 0, 0, 0]]], 0)
a = array[0,::]
for ix in range(array.shape[0] - 1):
b = array[ix,::]
c = array[ix+1,::]
b[~c.mask] = c.compressed()
a[~b.mask] = b.compressed()
不确定这是不是最好的解决方案