我有两个Numpy数组,数组A和数组B,具有相同的尺寸。数组A是带标签的数组,其中与同一“对象”对应的元素共享相同的值。基本上,我要做的是对于数组B中的每个非零元素,如果该元素对应于数组A中的非零元素,则重新标记该对象的每个元素(在数组A中)对应于数组B中的值。
例如,如果我有:
array A = [[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 2],
[3, 0, 0, 2, 0],
[3, 3, 0, 2, 0]]
array B = [[0, 0, 4, 4, 4],
[4, 4, 4, 4, 4],
[0, 4, 4, 0, 0],
[0, 4, 4, 4, 4],
[0, 0, 4, 4, 4],
[5, 0, 0, 0, 0]]
我希望生成的数组C看起来像:
array C = [[0, 0, 4, 0, 0],
[0, 4, 4, 4, 0],
[0, 0, 4, 0, 0],
[0, 0, 0, 0, 4],
[5, 0, 0, 4, 0],
[5, 5, 0, 4, 0]]
编辑:出于我的目的,A中的'对象'不能属于B中的多个'对象'。例如,A(上面)中的每个非零元素都映射到4或5 in B,但绝不是两个。
很抱歉,如果这个解释有点复杂。如果有任何帮助或指导,我将不胜感激。
答案 0 :(得分:0)
这有效:
C = np.zeros_like(A)
labels = set(A.flatten()) - {0}
for label in labels:
mask = (A == label)
value = set(B[mask].flatten()) - {0}
C[mask] = [*value][0]
也许有人可以指出一种更优雅的方式来找到value
?