def random_shift(x, wrg, hrg, row_axis=1, col_axis=2, channel_axis=0, fill_mode='nearest', cval=0.0):
    "Performs a random spatial shift of a Numpy image tensor.\n\n    # Arguments\n        x: Input tensor. Must be 3D.\n        wrg: Width shift range, as a float fraction of the width.\n        hrg: Height shift range, as a float fraction of the height.\n        row_axis: Index of axis for rows in the input tensor.\n        col_axis: Index of axis for columns in the input tensor.\n        channel_axis: Index of axis for channels in the input tensor.\n        fill_mode: Points outside the boundaries of the input\n            are filled according to the given mode\n            (one of `{'constant', 'nearest', 'reflect', 'wrap'}`).\n        cval: Value used for points outside the boundaries\n            of the input if `mode='constant'`.\n\n    # Returns\n        Shifted Numpy image tensor.\n    "
    (h, w) = (x.shape[row_axis], x.shape[col_axis])
    tx = (np.random.uniform((- hrg), hrg) * h)
    ty = (np.random.uniform((- wrg), wrg) * w)
    translation_matrix = np.array([[1, 0, tx], [0, 1, ty], [0, 0, 1]])
    transform_matrix = translation_matrix
    x = apply_transform(x, transform_matrix, channel_axis, fill_mode, cval)
    return x
Performs a random spatial shift of a Numpy image tensor.

# Arguments
    x: Input tensor. Must be 3D.
    wrg: Width shift range, as a float fraction of the width.
    hrg: Height shift range, as a float fraction of the height.
    row_axis: Index of axis for rows in the input tensor.
    col_axis: Index of axis for columns in the input tensor.
    channel_axis: Index of axis for channels in the input tensor.
    fill_mode: Points outside the boundaries of the input
        are filled according to the given mode
        (one of `{'constant', 'nearest', 'reflect', 'wrap'}`).
    cval: Value used for points outside the boundaries
        of the input if `mode='constant'`.

# Returns
    Shifted Numpy image tensor.
def random_shift(x, wrg, hrg, row_axis=1, col_axis=2, channel_axis=0, fill_mode='nearest', cval=0.0):
    "Performs a random spatial shift of a Numpy image tensor.\n\n    # Arguments\n        x: Input tensor. Must be 3D.\n        wrg: Width shift range, as a float fraction of the width.\n        hrg: Height shift range, as a float fraction of the height.\n        row_axis: Index of axis for rows in the input tensor.\n        col_axis: Index of axis for columns in the input tensor.\n        channel_axis: Index of axis for channels in the input tensor.\n        fill_mode: Points outside the boundaries of the input\n            are filled according to the given mode\n            (one of `{'constant', 'nearest', 'reflect', 'wrap'}`).\n        cval: Value used for points outside the boundaries\n            of the input if `mode='constant'`.\n\n    # Returns\n        Shifted Numpy image tensor.\n    "
    (h, w) = (x.shape[row_axis], x.shape[col_axis])
    tx = (np.random.uniform((- hrg), hrg) * h)
    ty = (np.random.uniform((- wrg), wrg) * w)
    translation_matrix = np.array([[1, 0, tx], [0, 1, ty], [0, 0, 1]])
    transform_matrix = translation_matrix
    x = apply_transform(x, transform_matrix, channel_axis, fill_mode, cval)
    return x