mygrad.clip#

mygrad.clip(a: ArrayLike, a_min: ArrayLike | None, a_max: ArrayLike | None, out: Tensor | ndarray | None = None, *, constant: bool | None = None) Tensor[source]#

Clip (limit) the values in an array.

Given an interval, values outside the interval are clipped to the interval edges. For example, if an interval of [0, 1] is specified, values smaller than 0 become 0, and values larger than 1 become 1.

Equivalent to mg.minimum(a_max, mg.maximum(a, a_min))`.

No check is performed to ensure a_min < a_max.

This docstring was adapted from that of numpy.clip

Parameters:
aArrayLike

Array containing elements to clip.

a_minOptional[float, ArrayLike]

Minimum value. If None, clipping is not performed on lower interval edge. Not more than one of a_min and a_max may be None.

a_maxOptional[float, ArrayLike]

Maximum value. If None, clipping is not performed on upper interval edge. Not more than one of a_min and a_max may be None. If a_min or a_max are ArrayLike, then the three arrays will be broadcasted to match their shapes.

outOptional[Union[ndarray, Tensor]]

A location into which the result is stored. If provided, it must have a shape that the inputs broadcast to. If not provided or None, a freshly-allocated tensor is returned.

constantbool, optional(default=False)

If True, the returned tensor is a constant (it does not backpropagate a gradient)

Returns:
Tensor

A tensor with the elements of a, but where values < a_min are replaced with a_min, and those > a_max with a_max.

Examples

>>> import mygrad as mg
>>> a = mg.arange(10)
>>> mg.clip(a, 1, 8)
Tensor([1, 1, 2, 3, 4, 5, 6, 7, 8, 8])
>>> a
Tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> mg.clip(a, [3, 4, 1, 1, 1, 4, 4, 4, 4, 4], 8)
Tensor([3, 4, 2, 3, 4, 5, 6, 7, 8, 8])