我的问题是双重的
首先,假设我有两个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()
不确定这是否是最佳解决方案
答案 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数组。