更新未屏蔽的numpy数组

时间:2016-10-05 08:56:18

标签: python arrays numpy

我的问题是双重的

首先,假设我有两个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()

不确定这是否是最佳解决方案

1 个答案:

答案 0 :(得分:5)

使用<div class="header"> <table width="100%"> <tr height="25"> <th width="20%">Head1</th> <th width="20%">Head2</th> <th width="20%">Head3</th> <th width="20%">Head4</th> <th width="20%">Head5</th> </tr> </table> </div> <div style="width:100%; height:200px; overflow:auto;"> <table width="100%"> <tr height="50"> <td width="20%"> </td> <td width="20%"> </td> <td width="20%"> </td> <td width="20%"> </td> <td width="20%"> </td> </tr> <tr height="50"> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr height="50"> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr height="50"> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr height="50"> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr height="50"> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> </div>

a[~b.mask] = b.compressed()选择a[~b.mask]中未a未屏蔽的所有值。 b是一个展平数组,其中包含b.compressed()中所有未屏蔽的值。

示例:

b

这也适用于3d数组。