您可以使用行和列中非零元素的最大和最小索引来获取1的范围,然后根据此范围填充数组索引:
>>> a=np.array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
... [ 0., 0., 0., 0., 1., 0., 0., 0., 0.],
... [ 0., 0., 1., 1., 1., 1., 1., 0., 0.],
... [ 0., 0., 1., 1., 1., 1., 1., 0., 0.],
... [ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
... [ 0., 0., 1., 1., 1., 1., 1., 0., 0.],
... [ 0., 0., 1., 1., 1., 1., 1., 0., 0.],
... [ 0., 0., 0., 0., 1., 0., 0., 0., 0.],
... [ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
>>>
>>> (min_row,max_row),(min_col,max_col)=map(lambda x :(np.min(x),np.max(x)),np.nonzero(a))
>>> a[min_row:max_row+1,min_col:max_col+1]=1
>>> a
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])