ak.mask#
Defined in awkward.operations.ak_mask on line 19.
- ak.mask(array, mask, *, valid_when=True, highlevel=True, behavior=None, attrs=None)#
- Parameters:
array – Array-like data (anything
ak.to_layoutrecognizes).mask (array of booleans) – The mask that overlays elements in the
arraywith None. Must have the same length asarray.valid_when (bool) – If True, True values in
maskare considered valid (passed fromarrayto the output); if False, False values inmaskare considered valid.highlevel (bool) – If True, return an
ak.Array; otherwise, return a low-levelak.contents.Contentsubclass.behavior (None or dict) – Custom
ak.behaviorfor the output array, if high-level.attrs (None or dict) – Custom attributes for the output array, if high-level.
Returns an array for which:
output[i] = array[i] if mask[i] == valid_when else None
Unlike filtering data with
ak.Array.__getitem__, thisoutputhas the same length as the originalarrayand can therefore be used in calculations with it, such as universal functions.For example, with
>>> array = ak.Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
with a boolean selection of
goodelements like>>> good = (array % 2 == 1) >>> good <Array [False, True, False, True, ..., True, False, True] type='10 * bool'>
could be used to filter the original
array(or another with the same length).>>> array[good] <Array [1, 3, 5, 7, 9] type='5 * int64'>
However, this eliminates information about which elements were dropped and where they were. If we instead use
ak.mask,>>> ak.mask(array, good) <Array [None, 1, None, 3, None, 5, None, 7, None, 9] type='10 * ?int64'>
this information and the length of the array is preserved, and it can be used in further calculations with the original
array(or another with the same length).>>> ak.mask(array, good) + array <Array [None, 2, None, 6, None, 10, None, 14, None, 18] type='10 * ?int64'>
In particular, successive filters can be applied to the same array.
Even if the
arrayand/or themaskis nested,>>> array = ak.Array([[[0, 1, 2], [], [3, 4], [5]], [[6, 7, 8], [9]]]) >>> good = (array % 2 == 1) >>> good <Array [[[False, True, False], ..., [True]], ...] type='2 * var * var * bool'>
it can still be used with
ak.maskbecause thearrayandmaskparameters are broadcasted.>>> ak.mask(array, good) <Array [[[None, 1, None], [], ..., [5]], ...] type='2 * var * var * ?int64'>
See
ak.broadcast_arraysfor details about broadcasting and the generalized set of broadcasting rules.Another syntax for:
ak.mask(array, array_of_booleans)
is:
array.mask[array_of_booleans]
(which is 5 characters away from simply filtering the
array).