skimage.util.arraycrop 源代码

"""
The arraycrop module contains functions to crop values from the edges of an
n-dimensional array.
"""

import numpy as np
from numbers import Integral

__all__ = ['crop']


[文档] def crop(ar, crop_width, copy=False, order='K'): """Crop array `ar` by `crop_width` along each dimension. Parameters ---------- ar : array-like of rank N Input array. crop_width : {sequence, int} Number of values to remove from the edges of each axis. ``((before_1, after_1),`` ... ``(before_N, after_N))`` specifies unique crop widths at the start and end of each axis. ``((before, after),) or (before, after)`` specifies a fixed start and end crop for every axis. ``(n,)`` or ``n`` for integer ``n`` is a shortcut for before = after = ``n`` for all axes. copy : bool, optional If `True`, ensure the returned array is a contiguous copy. Normally, a crop operation will return a discontiguous view of the underlying input array. order : {'C', 'F', 'A', 'K'}, optional If ``copy==True``, control the memory layout of the copy. See ``np.copy``. Returns ------- cropped : array The cropped array. If ``copy=False`` (default), this is a sliced view of the input array. """ ar = np.array(ar, copy=False) if isinstance(crop_width, Integral): crops = [[crop_width, crop_width]] * ar.ndim elif isinstance(crop_width[0], Integral): if len(crop_width) == 1: crops = [[crop_width[0], crop_width[0]]] * ar.ndim elif len(crop_width) == 2: crops = [crop_width] * ar.ndim else: raise ValueError( f'crop_width has an invalid length: {len(crop_width)}\n' f'crop_width should be a sequence of N pairs, ' f'a single pair, or a single integer' ) elif len(crop_width) == 1: crops = [crop_width[0]] * ar.ndim elif len(crop_width) == ar.ndim: crops = crop_width else: raise ValueError( f'crop_width has an invalid length: {len(crop_width)}\n' f'crop_width should be a sequence of N pairs, ' f'a single pair, or a single integer' ) slices = tuple(slice(a, ar.shape[i] - b) for i, (a, b) in enumerate(crops)) if copy: cropped = np.array(ar[slices], order=order, copy=True) else: cropped = ar[slices] return cropped