gpt4 book ai didi

python - 两个 numpy 索引数组相交

转载 作者:行者123 更新时间:2023-12-01 04:28:44 25 4
gpt4 key购买 nike

假设我有两个阈值不同的图像,并且我想找到两个阈值上索引的集合交集,换句话说,两个列表中的所有索引。假设尺寸相等,因此无需担心。

img1 = #something
img2 = #something slightly different
indexes1 = np.nonzero(img1)
indexes2 = np.nonzero(img2)
index_intersection = #???

我怎样才能以一种易于理解且高效的方式做到这一点?

最佳答案

如果您正在寻找匹配的非零 XY 索引对,您可以在输入数组的非零掩码之间使用 bool AND 运算,然后使用 np.nonzero ,就像这样 -

out = np.nonzero((img1!=0) & (img2!=0))

您可以使用 np.intersect1d 验证这些结果从 img1img2 获取匹配的线性索引后,为我们提供了第二种方法来解决手头的问题,就像这样 -

l_intsct = np.intersect1d(np.nonzero(img1.ravel())[0],np.nonzero(img2.ravel())[0])
out = np.unravel_index(l_intsct,img1.shape)

示例运行 -

In [127]: img1
Out[127]:
array([[3, 2, 3, 1, 0],
[3, 1, 1, 2, 2],
[0, 2, 3, 2, 1],
[0, 0, 0, 4, 2]])

In [128]: img2
Out[128]:
array([[1, 1, 4, 0, 0],
[0, 0, 0, 0, 2],
[4, 1, 0, 3, 1],
[1, 0, 4, 1, 4]])

In [129]: np.nonzero(img1)
Out[129]:
(array([0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3]),
array([0, 1, 2, 3, 0, 1, 2, 3, 4, 1, 2, 3, 4, 3, 4]))

In [130]: np.nonzero(img2)
Out[130]:
(array([0, 0, 0, 1, 2, 2, 2, 2, 3, 3, 3, 3]),
array([0, 1, 2, 4, 0, 1, 3, 4, 0, 2, 3, 4]))

In [131]: np.nonzero((img1!=0) & (img2!=0))
Out[131]: (array([0, 0, 0, 1, 2, 2, 2, 3, 3]), array([0, 1, 2, 4, 1, 3, 4, 3, 4]))

In [132]: l_intsct = np.intersect1d(np.nonzero(img1.ravel())[0],np.nonzero(img2.ravel())[0])

In [133]: np.unravel_index(l_intsct,img1.shape)
Out[133]: (array([0, 0, 0, 1, 2, 2, 2, 3, 3]), array([0, 1, 2, 4, 1, 3, 4, 3, 4]))

关于python - 两个 numpy 索引数组相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32724328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com