图像分析 - 映射两个标记的Numpy数组

时间:2016-07-27 18:12:14

标签: numpy

我有两个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,但绝不是两个。

很抱歉,如果这个解释有点复杂。如果有任何帮助或指导,我将不胜感激。

1 个答案:

答案 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