Python:如何使用“numpy.all”和“numpy.any”检查一个数组是否包含在另一个数组中?
Python: How to check if an array is contained in another array using `numpy.all`and `numpy.any`?
我正在使用 scikit-image
检测图像上的某些区域。我能够使用 blob_doh
函数检测斑点。我还能够使用 Canny edge detector
和标签找到区域。
现在我想检查我之前找到的斑点是否在这些区域内,并整理出那些不在任何区域内的斑点。然后我只想绘制区域内的斑点。
我试图使用 numpy.all
和 numpy.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.all
和 numpy.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)):
我正在使用 scikit-image
检测图像上的某些区域。我能够使用 blob_doh
函数检测斑点。我还能够使用 Canny edge detector
和标签找到区域。
现在我想检查我之前找到的斑点是否在这些区域内,并整理出那些不在任何区域内的斑点。然后我只想绘制区域内的斑点。
我试图使用 numpy.all
和 numpy.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.all
和 numpy.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)):