图像分析——映射两个带标签的Numpy数组
我有两个Numpy数组,数组A和数组B,它们的维数相等。数组A是一个带标签的数组,其中与相同“对象”对应的元素共享相同的值。基本上,我要做的是针对数组B中的每个非零元素,如果该元素对应于数组a中的一个非零元素,则重新标记该对象(数组a中)的每个元素,对应于数组B中的值 例如,如果我有:图像分析——映射两个带标签的Numpy数组,numpy,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
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(上面)中的每个非零元素都映射到B中的A 4或A 5,但决不能同时映射到这两个元素
对不起,如果这个解释有点复杂的话。我将感谢任何人能提供的任何帮助或指导 这是有效的:
C=np.类零(A)
labels=set(A.flatte())-{0}
对于标签中的标签:
掩码=(A==标签)
value=set(B[mask].flatte())-{0}
C[掩码]=[*值][0]
也许有人可以指出一种更优雅的方法来找到值
?这种方法有效:
C=np.类零(A)
labels=set(A.flatte())-{0}
对于标签中的标签:
掩码=(A==标签)
value=set(B[mask].flatte())-{0}
C[掩码]=[*值][0]
也许有人可以指出更优雅的方法来找到
值
?谢谢你的评论…我添加了一个示例案例。希望它有意义。那些在C[4,0]
和C[5,1]
的5s
,不应该是0s
?类似地,在C[5,3]
处的4
。你能再检查一下吗?因为A[5,0]处的元素与B中的A 5匹配,我希望A中属于标签3的其余元素也变成5s。但我仍然不明白这是一个定义良好的问题。如果A
中的一个“对象”属于B
中的两个不同对象,您将如何处理这种情况?或者这是绝对不可能的?非常感谢您指出--我应该提到,出于我的目的,A中的一个对象不能属于B中的多个对象。感谢您的评论…我添加了一个示例案例。希望它有意义。那些在C[4,0]
和C[5,1]
的5s
,不应该是0s
?类似地,在C[5,3]
处的4
。你能再检查一下吗?因为A[5,0]处的元素与B中的A 5匹配,我希望A中属于标签3的其余元素也变成5s。但我仍然不明白这是一个定义良好的问题。如果A
中的一个“对象”属于B
中的两个不同对象,您将如何处理这种情况?或者这是绝对不可能的?非常感谢你指出这一点——我应该提到,出于我的目的,A中的一个对象不能属于B中的多个对象。