在numpy.where返回的数组之间查找唯一索引

时间:2018-08-28 14:11:36

标签: python numpy

函数numpy.where返回了两个numpy数组,如下所示:

A = numpy.where(img == 255)
B = numpy.where(img2 != 0)

我需要在AB中找到唯一坐标的数量。我最初考虑使用numpy.intersect1d来获取公共索引的数量,并从两个数组的元素总数中减去该数量。但是这些数组不是一维的,所以我不确定该怎么做。

有什么建议可以实现这一目标吗?

谢谢

1 个答案:

答案 0 :(得分:1)

Numpy将xor运算符(^)解释为逻辑xor,遵循:

X|Y|X^Y
0|0| 0
0|1| 1
1|0| 1
1|1| 0

因此您可以对布尔数组进行异或:

(img == 255) ^ (img2 != 0)

一个例子:

>>> img == 255
array([[False,  True, False],
       [ True, False, False],
       [False, False, False]])
>>> img != 0
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])
>>> (img == 255) ^ (img2 != 0)
array([[False, False,  True],
       [ True,  True,  True],
       [False, False,  True]])
>>> ((img == 255) ^ (img2 != 0)).sum()
5

因此5True中有imgimg2不在同一索引的另一个数组中。


更新:

如果您想要Trueimgimg2的数量(即与两组True坐标的并集相同)。然后使用逻辑或代替:|