gpt4 book ai didi

python - 更新未屏蔽的 numpy 数组

转载 作者:行者123 更新时间:2023-11-28 21:45:08 25 4
gpt4 key购买 nike

我的问题是双重的

首先,假设我有两个部分屏蔽的 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()

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

最佳答案

使用 a[~b.mask] = b.compressed()

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

例子:

>>> 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]]

这也适用于 3d 数组。

关于python - 更新未屏蔽的 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39869524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com