我有一个数组a:
j-9YWMBYN98LN7
我还有一个面具b:
array([[[[14, 59, 18, 92],
[91, 38, 58, 23],
[33, 52, 93, 68],
[19, 21, 50, 77]],
[[90, 37, 22, 55],
[56, 54, 10, 16],
[83, 20, 36, 3],
[84, 87, 85, 81]]],
[[[ 0, 45, 72, 5],
[49, 46, 94, 53],
[34, 51, 75, 8],
[27, 79, 35, 15]],
[[ 7, 86, 64, 31],
[12, 70, 89, 62],
[13, 63, 88, 25],
[39, 11, 26, 6]]]])
如何修改数组a的那些元素,这些元素对应于掩码b中的元素?
特别是,我有一个数组c:
array([[[[ 0., 0., 0., 1.],
[ 1., 0., 0., 0.],
[ 0., 1., 1., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 1., 0., 1., 0.],
[ 0., 0., 0., 0.],
[ 0., 1., 1., 0.]]],
[[[ 0., 0., 0., 0.],
[ 1., 0., 1., 0.],
[ 0., 0., 1., 0.],
[ 0., 1., 0., 0.]],
[[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 1., 1., 0.],
[ 0., 0., 0., 0.]]]])
如何将c添加到a中,以便只将掩码b指示的元素添加到?
(这是我需要做的,通过卷积神经网络中的最大池层来反向传播错误)
答案 0 :(得分:4)
如果将b
解释为布尔掩码,那将非常容易:
b_mask = b.astype(bool)
d = a.copy()
d[b_mask] = a[b_mask] + c.ravel()
d
给我
array([[[[ 14, 59, 18, 92],
[ 92, 38, 58, 23],
[ 33, 54, 96, 68],
[ 19, 21, 50, 77]],
[[ 90, 37, 22, 55],
[ 60, 54, 15, 16],
[ 83, 20, 36, 3],
[ 84, 93, 92, 81]]],
[[[ 0, 45, 72, 5],
[ 57, 46, 103, 53],
[ 34, 51, 85, 8],
[ 27, 90, 35, 15]],
[[ 7, 98, 64, 31],
[ 12, 70, 102, 62],
[ 13, 77, 103, 25],
[ 39, 11, 26, 6]]]])
或者如果你想要就地:
b_mask = b.astype(bool)
a[b_mask] = a[b_mask] + c.ravel()