更新没有蒙版的numpy数组

时间:2022-08-28 21:44:10

My question is twofolded

我的问题是双重的

First, lets say I've two numpy arrays, that are partially masked

首先,假设我有两个numpy数组,它们是部分掩蔽的

array_old
[[-- -- -- --]
 [10 11 -- --]
 [12 14 -- --]
 [-- -- 17 --]]

array_update
[[--  5 -- --]
 [-- --  9 --]
 [-- 15  8 13]
 [-- -- 19 16]]

How to get create a new array, where all non-masked values are updated or ammended, like:

如何创建一个新数组,在其中更新或修改所有非掩码值,如:

array_new
[[--  5 -- --]
 [10 11  9 --]
 [12 15  8 13]
 [-- -- 19 16]]

Secondly, If possible, how to do above in a 3d numpy array?

其次,如果可能的话,如何在3d numpy数组中做上述操作?

UPDATE:

更新:

For the second part, now I use a for loop, using @freidrichen method as follows:

第二部分,我现在使用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()

Not sure if that's the best solution

不确定这是否是最好的解决方案

1 个解决方案

#1


5  

Use a[~b.mask] = b.compressed().

使用[~ b。面具]= b.compressed()。

a[~b.mask] selects all the values in a where b is not masked. b.compressed() is a flattened array with all the non-masked values in b.

a[~。选择a中的所有值,其中b没有蒙面。压缩()是一个扁平的数组,包含了b中的所有非屏蔽值。

Example:

例子:

>>> a = np.ma.masked_equal([[0, 0, 0, 0], [10, 11, 0, 0], [12, 14, 0, 0], [0, 0, 17, 0]], 0)
>>> b = np.ma.masked_equal([[0, 5, 0, 0], [0, 0, 9, 0], [0, 15, 8, 13], [0, 0, 19, 16]], 0)
>>> a[~b.mask] = b.compressed()
>>> a
[[-- 5 -- --]
[10 11 9 --]
[12 15 8 13]
[-- -- 19 16]]

This should work with 3d arrays too.

这也应该适用于3d数组。

#1


5  

Use a[~b.mask] = b.compressed().

使用[~ b。面具]= b.compressed()。

a[~b.mask] selects all the values in a where b is not masked. b.compressed() is a flattened array with all the non-masked values in b.

a[~。选择a中的所有值,其中b没有蒙面。压缩()是一个扁平的数组,包含了b中的所有非屏蔽值。

Example:

例子:

>>> a = np.ma.masked_equal([[0, 0, 0, 0], [10, 11, 0, 0], [12, 14, 0, 0], [0, 0, 17, 0]], 0)
>>> b = np.ma.masked_equal([[0, 5, 0, 0], [0, 0, 9, 0], [0, 15, 8, 13], [0, 0, 19, 16]], 0)
>>> a[~b.mask] = b.compressed()
>>> a
[[-- 5 -- --]
[10 11 9 --]
[12 15 8 13]
[-- -- 19 16]]

This should work with 3d arrays too.

这也应该适用于3d数组。