# ak.ptp¶

Defined in awkward.operations.reducers on line 623.

Parameters
• array – Data from which to find the range of values.

• axis (None or int) – If None, combine all values from the array into a single scalar result; if an int, group by that axis: `0` is the outermost, `1` is the first level of nested lists, etc., and negative `axis` counts from the innermost: `-1` is the innermost, `-2` is the next level up, etc.

• keepdims (bool) – If False, this reducer decreases the number of dimensions by 1; if True, the reduced values are wrapped in a new length-1 dimension so that the result of this operation may be broadcasted with the original array.

• mask_identity (bool) – If True, reducing over empty lists results in None (an option type); otherwise, reducing over empty lists results in the operation’s identity of 0.

Returns the range of values in each group of elements from `array` (many types supported, including all Awkward Arrays and Records). The range of an empty list is None, unless `mask_identity=False`, in which case it is 0. This operation is the same as NumPy’s ptp if all lists at a given dimension have the same length and no None values, but it generalizes to cases where they do not.

For example, with an `array` like

```ak.Array([[0, 1, 2, 3],
[          ],
[4, 5      ]])
```

The range of the innermost lists is

```>>> ak.ptp(array, axis=-1)
<Array [3, None, 1] type='3 * ?float64'>
```

because there are three lists, the first has a range of `3`, the second is `None` because the list is empty, and the third has a range of `1`. Similarly,

```>>> ak.ptp(array, axis=-1, mask_identity=False)
<Array [3, 0, 1] type='3 * float64'>
```

The second value is `0` because the list is empty.

See `ak.sum` for a more complete description of nested list and missing value (None) handling in reducers.