如何在numpy数组中求和连续的非零元素

时间:2016-01-16 16:05:44

标签: python numpy scipy

这是我的问题 *值是2-d np.array(31 x 37),值为0,1。

它显示如下:

如果值== 1

,则仅绘制蓝色网格
 value_mask = np.ma.masked_less(value[:,:],0.001)
 pc =plt.pcolor(xx,yy,value_mask,alpha =1,facecolor = "pink",edgecolor = 'steelblue',zorder =3)

enter image description here

如何将连续“蓝色网格”的数量相加。

在这种情况下,我的意思是将忽略与大多数人隔离的1右上方网格。

1 个答案:

答案 0 :(得分:3)

您可以使用scipy.ndimage.label标记value数组中的连续区域,然后将每个标签的元素数量相加:

import numpy as np
from scipy import ndimage

value = np.array([[0, 0, 1, 1, 0, 0],
                  [0, 0, 0, 1, 0, 0],
                  [1, 1, 0, 0, 1, 0],
                  [0, 0, 0, 1, 0, 0]])

# label contiguous regions of non-zero elements
labels, nfeatures = ndimage.label(value)

# sizes of each region
sizes = (labels == (np.arange(nfeatures) + 1)[:, None, None]).sum((1, 2))

biggest = sizes.max()   # number of non-zero elements in largest contiguous region

print(biggest)
# 3