根据条件用不同的数组替换多维数组(Python3.x)



我在Python 3.9中有三个多维数组,我想在第三个数组的条件下用第二个数组的值替换一个数组的值。所以:

Array1 = [[[4, 2, 3], [1, 0, 10], [7, 4, 6]],
[[8, 7, 95], [3, 5, 22], [0, 7, 0]],
[[5, 0, 60], [5, 230, 70], [6, 76, 30]]]
Array2 = [[[12, 3, 4], [4, 55, 0], [0, 5, 76]],
[[34, 60, 76], [40, 430, 0], [4, 0, 11]],
[[2, 34, 0], [1, 0, 0], [76, 4, 77]]]
Mask = [[[0, 1, 0], [1, 0, 0], [1, 0, 0]],
[[0, 1, 0], [0, 1, 1], [1, 1, 1]],
[[1, 0, 1], [1, 0, 0], [1, 1, 0]]]

我想用第二个数组的值替换第一个数组中的值,如果在掩码数组中的相同位置,则值为1。所以结果应该是:

Array1 = array([[[  4,   3,   3],
[  4,   0,  10],
[  0,   4,   6]],
[[  8,  60,  95],
[  3, 430,   0],
[  4,   0,  11]],
[[  2,   0,   0],
[  1, 230,  70],
[ 76,   4,  30]]])

是否有任何方法可以使用快速(numpy)命令,不需要我循环整个数组?在实际操作中,整个数组的大小为(1500,255,4),因此需要相当多的处理时间。

Tnx提前

np.where做的正是这件事:

np.where(Mask, Array2, Array1)

输出:

array([[[  4,   3,   3],
[  4,   0,  10],
[  0,   4,   6]],
[[  8,  60,  95],
[  3, 430,   0],
[  4,   0,  11]],
[[  2,   0,   0],
[  1, 230,  70],
[ 76,   4,  30]]])

最新更新