如何找到两个元组之间的共同元素

时间:2019-09-30 20:15:26

标签: python python-3.x

我有两个尺寸为128x128x128的图像。它们是二进制图像。我想在两个图像中找到1值的共同位置。例如,在图像1中的位置(2,2)具有值1,而在图像2中的(2,2)具有值1,它们被视为一个公共位置。我已经尝试过下面的代码,但是它说我无法进行对话。我应该如何解决?这是我在pos_common = tuple(set(pos_1) & set(pos_2))

中显示的错误
TypeError: unhashable type: 'numpy.ndarray'
pos_1 = np.where(img1==1) #returns (array([  0,   0,   0, ..., 127]), array([  0,   0,   0, ..., 127]), array([  0,   1,   2, ..., 127]))
pos_2 = np.where(img2==1) # returns (array([  1,   4,   9, ..., 127]), array([  0,   0,   0, ..., 127]), array([  0,   1,   2, ..., 127]))
pos_common = tuple(set(pos_1) & set(pos_2)) # Error TypeError: unhashable type: 'numpy.ndarray'

2 个答案:

答案 0 :(得分:2)

-嘿,金熙,

我会

  1. 将img1和img2中所有不等于1到0的值设置
  2. 使用numpy.multiply()仅保留两个矩阵均等于1的那些
  3. 最后,如果仍然需要,请在np.where处应用

这是我用来重现您的问题的代码(假设是简单的2d数组):

img1 = np.array([[10,10,10,1,1,1,10], [10,10,10,1,10,10,10]])
img2 = np.array([[10,10,10,10,1,10,10], [10,10,10,1,10,10,10]])

img1[img1 != 1] = 0
img2[img2 != 1] = 0

pos_common = np.multiply(img1, img2)

np.where(pos_common == 1)

希望这会有所帮助。

答案 1 :(得分:2)

我找到了简单的解决方案。它可能会帮助某人

pos_common = np.where((img1==1) & (img2==1))