mindspore.ops.sequence_mask

mindspore.ops.sequence_mask(lengths, maxlen=None)[source]

Returns a mask tensor representing the first N positions of each cell.

If lengths has shape (d_1, d_2, …, d_n), then the resulting tensor mask has type and shape (d_1, d_2, …, d_n, maxlen), with mask[i_1, i_2, …, i_n, j] = (j < lengths[i_1, i_2, …, i_n])

Parameters
  • lengths (Tensor) – Tensor to calculate the mask for. All values in this tensor should be less than or equal to maxlen. Values greater than maxlen will be treated as maxlen.

  • maxlen (int) – size of the last dimension of returned tensor. Must be positive and same type as elements in lengths. Default is None.

Returns

One mask tensor of shape lengths.shape + (maxlen,) .

Raises
  • TypeError – If lengths is not a Tensor.

  • TypeError – If maxlen is not an int.

  • TypeError – If dtype of lengths is neither int32 nor int64.

Supported Platforms:

GPU

Examples

>>> from mindspore import Tensor, ops
>>> import mindspore
>>> import numpy as np
>>> # case 1: When maxlen is assigned
>>> x = Tensor(np.array([1, 2, 3, 4]))
>>> output = ops.sequence_mask(x, 5)
>>> print(output)
[[ True False False False False]
 [ True  True False False False]
 [ True  True  True False False]
 [ True  True  True  True False]]
>>> # case 2: When there is 0 in x
>>> x = Tensor(np.array([[1, 3], [2, 0]]))
>>> output = ops.sequence_mask(x, 5)
>>> print(output)
[[[ True False False False False]
  [ True  True  True False False]]
 [[ True  True False False False]
  [False False False False False]]]
>>> # case 3: when the maxlen is not assigned
>>> x = Tensor(np.array([[1, 3], [2, 4]]))
>>> output = ops.sequence_mask(x)
>>> print(output)
[[[ True False False False ]
  [ True  True  True False ]]
 [[ True  True False False ]
  [ True  True  True  True ]]]