我在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]]])