

``mx.nd.SequenceMask``
============================================

Description
----------------------

Sets all elements outside the sequence to a constant value.

This function takes an n-dimensional input array of the form
[max_sequence_length, batch_size, other_feature_dims] and returns an array of the same shape.

Parameter `sequence_length` is used to handle variable-length sequences. `sequence_length`
should be an input array of positive ints of dimension [batch_size].
To use this parameter, set `use_sequence_length` to `True`,
otherwise each example in the batch is assumed to have the max sequence length and
this operator works as the `identity` operator.


**Example**::

	 
	 x = [[[  1.,   2.,   3.],
	 [  4.,   5.,   6.]],
	 
	 [[  7.,   8.,   9.],
	 [ 10.,  11.,  12.]],
	 
	 [[ 13.,  14.,   15.],
	 [ 16.,  17.,   18.]]]
	 
	 // Batch 1
	 B1 = [[  1.,   2.,   3.],
	 [  7.,   8.,   9.],
	 [ 13.,  14.,  15.]]
	 
	 // Batch 2
	 B2 = [[  4.,   5.,   6.],
	 [ 10.,  11.,  12.],
	 [ 16.,  17.,  18.]]
	 
	 // works as identity operator when sequence_length parameter is not used
	 SequenceMask(x) = [[[  1.,   2.,   3.],
	 [  4.,   5.,   6.]],
	 
	 [[  7.,   8.,   9.],
	 [ 10.,  11.,  12.]],
	 
	 [[ 13.,  14.,   15.],
	 [ 16.,  17.,   18.]]]
	 
	 // sequence_length [1,1] means 1 of each batch will be kept
	 // and other rows are masked with default mask value = 0
	 SequenceMask(x, sequence_length=[1,1], use_sequence_length=True) =
	 [[[  1.,   2.,   3.],
	 [  4.,   5.,   6.]],
	 
	 [[  0.,   0.,   0.],
	 [  0.,   0.,   0.]],
	 
	 [[  0.,   0.,   0.],
	 [  0.,   0.,   0.]]]
	 
	 // sequence_length [2,3] means 2 of batch B1 and 3 of batch B2 will be kept
	 // and other rows are masked with value = 1
	 SequenceMask(x, sequence_length=[2,3], use_sequence_length=True, value=1) =
	 [[[  1.,   2.,   3.],
	 [  4.,   5.,   6.]],
	 
	 [[  7.,   8.,   9.],
	 [  10.,  11.,  12.]],
	 
	 [[   1.,   1.,   1.],
	 [  16.,  17.,  18.]]]
	 
	 
	 


Arguments
------------------

+----------------------------------------+------------------------------------------------------------+
| Argument                               | Description                                                |
+========================================+============================================================+
| ``data``                               | NDArray-or-Symbol                                          |
|                                        | n-dimensional input array of the form                      |
|                                        | [max_sequence_length, batch_size, other_feature_dims]      |
|                                        | where                                                      |
|                                        | n>2                                                        |
+----------------------------------------+------------------------------------------------------------+
| ``sequence.length``                    | NDArray-or-Symbol                                          |
|                                        | vector of sequence lengths of the form [batch_size]        |
+----------------------------------------+------------------------------------------------------------+
| ``use.sequence.length``                | boolean, optional, default=0.                              |
|                                        |                                                            |
|                                        | If set to true, this layer takes in an extra input         |
|                                        | parameter `sequence_length` to specify variable length     |
|                                        | sequence                                                   |
+----------------------------------------+------------------------------------------------------------+
| ``value``                              | float, optional, default=0.                                |
|                                        |                                                            |
|                                        | The value to be used as a mask.                            |
+----------------------------------------+------------------------------------------------------------+
| ``axis``                               | int, optional, default='0'.                                |
|                                        |                                                            |
|                                        | The sequence axis. Only values of 0 and 1 are currently    |
|                                        | supported.                                                 |
+----------------------------------------+------------------------------------------------------------+

Value
----------

``out`` The result mx.ndarray


Link to Source Code: http://github.com/apache/incubator-mxnet/blob/1.6.0/src/operator/sequence_mask.cc#L186

