Python—在2D numpy数组中查找特定值的最大区域的有效方法

Python—在2D numpy数组中查找特定值的最大区域的有效方法,python,numpy,scipy,multidimensional-array,Python,Numpy,Scipy,Multidimensional Array,我有一个2D numpy数组,其中有些值为零,有些值不是。我正试图找到一种有效的方法来找到数组中最大的一组零(通过返回零的数量以及中心的大致位置) 例如,在这个数组中,我想找到以(3,4)为中心的9块: 在numpy或scipy中有没有一种很好的矢量化方法来完成类似的任务 这些束的形状大致为圆形,并且没有孔 从scipy做了一些类似的事情,但不是我想要的。我有一种感觉,可能会有所帮助,但不确定如何有效地使用它们来解决这个问题。您就快到了,您只需要将ndimage.label与numpy.binc

我有一个2D numpy数组,其中有些值为零,有些值不是。我正试图找到一种有效的方法来找到数组中最大的一组零(通过返回零的数量以及中心的大致位置)

例如,在这个数组中,我想找到以(3,4)为中心的9块:

在numpy或scipy中有没有一种很好的矢量化方法来完成类似的任务

这些束的形状大致为圆形,并且没有孔


从scipy做了一些类似的事情,但不是我想要的。我有一种感觉,可能会有所帮助,但不确定如何有效地使用它们来解决这个问题。

您就快到了,您只需要将
ndimage.label
numpy.bincount
结合起来:

import numpy as np
from scipy import ndimage

array = np.random.randint(0, 3, size=(200, 200))

label, num_label = ndimage.label(array == 0)
size = np.bincount(label.ravel())
biggest_label = size[1:].argmax() + 1
clump_mask = label == biggest_label

一旦你有了
clump\u mask
你就可以计算质心或者使用其他方法来获得中心。

如果有一个洞怎么办?你是说不会有洞是因为你知道输入看起来像什么,还是因为你想排除有洞的束?这是因为我知道输入不会有洞(如果有的话,它们将非常罕见)。这与我将要粘贴的内容非常接近!我唯一不同的做法是:(1)
.ravel().astype(int)
,因为有人抱怨我从
uint32
转换到
int32
,还有(2)我添加了(更改变量名以匹配你的)
com=scipy.ndimage.center\u-of-mass(数组==0,标签,最大的标签)
,以获得中心。谢谢!工作完美:)
import numpy as np
from scipy import ndimage

array = np.random.randint(0, 3, size=(200, 200))

label, num_label = ndimage.label(array == 0)
size = np.bincount(label.ravel())
biggest_label = size[1:].argmax() + 1
clump_mask = label == biggest_label