Bre*_*ent 10 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 ]]
Run Code Online (Sandbox Code Playgroud)
是否有一个很好的矢量化方式来在numpy或scipy中完成这样的事情?
这些团块的形状大致为圆形,并且没有孔.
来自scipy的ndimage.label()做了一些与此相近的事情,但并不是我所追求的.我有一种感觉numpy.where()和numpy.diff()可能会有所帮助,但不知道如何有效地使用它们来解决这个问题.
Bi *_*ico 10
你几乎没有,你只需要结合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
Run Code Online (Sandbox Code Playgroud)
一旦你有了,clump_mask你可以计算质心或使用其他方法来获得中心.