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

时间:2013-11-21 00:42:11

标签: python numpy scipy multidimensional-array

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

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

[[ 1, 1, 1, 0, 0 ],
 [ 1, 0, 1, 1, 0 ],
 [ 1, 1, 1, 1, 1 ],
 [ 1, 1, 0, 0, 0 ],
 [ 1, 1, 0, 0, 0 ],
 [ 1, 1, 0, 0, 0 ]]

是否有一种很好的矢量化方法可以在numpy或scipy中完成这样的事情?

这些团块的形状大致为圆形,并且没有洞。

来自scipy的

ndimage.label()做了一些接近这个的事情,但并不是我所追求的。我有一种感觉numpy.where()numpy.diff()可能有所帮助,但不确定如何有效地使用它们来解决这个问题。

1 个答案:

答案 0 :(得分:9)

你几乎就在那里,你只需要将ndimage.labelnumpy.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_mask后,您可以计算质心或使用其他方法获取中心。