gpt4 book ai didi

Python:如何使用 `numpy.all` 和 `numpy.any` 检查一个数组是否包含在另一个数组中?

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:18 25 4
gpt4 key购买 nike

我正在使用 scikit-image 检测图像上的特定区域。我能够使用 blob_doh 函数检测 blob。此外,我还能够使用 Canny 边缘检测器 和标记找到区域。

现在我想检查我之前找到的 Blob 是否在这些区域内,并整理出那些不在任何区域内的 Blob 。然后我只想绘制区域内的 Blob 。

我试图使用 numpy.allnumpy.any 来实现它,但我可能误解了这些函数的工作方式。这是我所拥有的:

for region in regions:
# list of pixels' coords in a region
pixel_array = region.coords

# check if a blob is inside the region
for blob in blobs_doh:
y, x, r = blob

if np.any(pixel_array == [x, y]):
c = plt.Circle((x, y), r, color='red', linewidth=1, fill=False)
minr, minc, maxr, maxc = region.bbox
rect = mpatches.Rectangle((minc, minr), maxc - minc, maxr - minr, fill=False, edgecolor='lime', linewidth=1)
# draw blobs and regtangles
ax.add_patch(c)
ax.add_patch(rect)
break

所以,我做什么。 region 是形状为 [[a1, b1], [a2, b2], [a3, b3], ..., [an, bn]] 的数组,blob 是形状为 [c, d] 的数组。我的想法是检查 region 中是否有任何子数组等于 blob。我当然可以用简单的方式在循环中搜索,但我认为有更有效的方法,并尝试使用 numpy.allnumpy.any。不幸的是,我无法让它正常工作。 np.any(pixel_array == [x, y]) 行仅检查 blob 的第一个元素,但不检查子数组 [x, y] 作为一个整体。我还使用 axis 参数尝试了 .any.all 的不同组合:

np.any(pixel_array == [x, y], axis = 1).all(axis = 0)

但无法得到任何可接受的结果。

请帮我完成这个任务。执行此类检查的更好方法是什么?

谢谢。

最佳答案

如果将 pixel_array 转换为列表,就可以做到。不确定效率如何,但这可行:

if [x,y] in pixel_array.tolist():

编辑:

看起来有人已经为很多不同的选项计时了in this answer .上面的 tolist() 解决方案还不错,但在一系列情况下的最佳选择似乎是:

 if any(np.equal(pixel_array,[x,y]).all(1)):

关于Python:如何使用 `numpy.all` 和 `numpy.any` 检查一个数组是否包含在另一个数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044837/

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