【问题标题】:Numpy: Get Boundary Corners of "Valid" RegionNumpy:获取“有效”区域的边界角
【发布时间】:2021-04-29 22:30:51
【问题描述】:
我有一个 n 维 numpy 布尔值数组。我想找到索引,以便能够将我的切片包含所有 True 值和尽可能少的 False 值切片到数组中。
用较少的数学术语来说,基本上我有一个 3D 图像,我希望能够根据我定义的给定函数自动裁剪它(例如只关心标有绿色的部分)。最好的方法是什么?首选 n 维解决方案,以便我将来可以用于所有图像类型。
【问题讨论】:
标签:
python
numpy
linear-algebra
【解决方案1】:
一种可能的方法是使用numpy.nonzero 获取True 值的所有索引,然后使用每个维度中的最小值和最大值来构造切片:
def bounding_slices(a):
indices = np.nonzero(a)
# indices is an tuple of arrays containing the indices of the non-zero elements
# (False is interpreted as zero) with each array corresponding to one dimension
slices = []
for indices_in_dimension in indices:
slices.append(slice(
np.min(indices_in_dimension), # start slice at lowest index in dimension
np.max(indices_in_dimension) + 1 # end slice after (+ 1) highest index
))
return slices