def _fill_gap(a):
    """
    a = 1D array of `True`s and `False`s.
    Fill the gap between first and last `True` with `True`s.
    Doesn't do a copy of `a` but in this case it isn't really needed.
    """
a[slice(*a.nonzero()[0].take([0, -1]))] = True
return a

def crop3(d, clip=True):
    dat = np.array(d)
if clip:
    np.clip(dat, 0, 1, out=dat)
dat = np.compress(_fill_gap(dat.any(axis=0)), dat, axis=1)
dat = np.compress(_fill_gap(dat.any(axis=1)), dat, axis=0)
return dat
Как обрезать нулевые края массива numpy?