def scatter(seq, condition, new_sequence_axis_typeinfo=None, name=''): ''' Performs the inverse of gather. The sequence ``seq`` must have as many elements as the number of True values in the sequence ``condition``. It will return a sequence whose length is the same as the ``condition`` sequence with zeroes everywhere except for the locations where ``condition`` evaluates to True in which case it will copy the elements from ``seq`` preserving their order. Example: >>> x = C.sequence.input(shape=(3,2)) >>> t = C.sequence.last(x) >>> b = C.sequence.is_first(x) >>> y = C.sequence.scatter(t, b) >>> # create one sequence of 4 tensors each with shape (3,2) >>> x0 = np.reshape(np.arange(24.0,dtype=np.float32),(1,4,3,2)) >>> y.eval({x:x0}) [array([[[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]]], dtype=float32)] Args: seq: the symbolic sequence from which elements will be copied in the output condition: the symbolic sequence which denotes the locations where elements should be copied new_sequence_axis_typeinfo: tuple of integers indicating the scaling and additive factors for the length of the new sequence axis w.r.t. the condition sequence. This is used to determine the sequence axis to be used for the output of the gather operation. If this argument is left unspecified a new independent sequence axis is created. name (str): the name of the node in the network Returns: :class:`~cntk.ops.functions.Function` ''' from cntk.cntk_py import scatter seq = sanitize_input(seq, get_data_type(seq)) condition = sanitize_input(condition, get_data_type(condition)) if new_sequence_axis_typeinfo is None: return scatter(seq, condition, name) else: return scatter(seq, condition, new_sequence_axis_typeinfo, name)
def scatter(seq, condition, new_sequence_axis_typeinfo=None, name=''): ''' Performs the inverse of gather. The sequence ``seq`` must have as many elements as the number of True values in the sequence ``condition``. It will return a sequence whose length is the same as the ``condition`` sequence with zeroes everywhere except for the locations where ``condition`` evaluates to True in which case it will copy the elements from ``seq`` preserving their order. Example: >>> x = C.sequence.input_variable(shape=(3,2)) >>> t = C.sequence.last(x) >>> b = C.sequence.is_first(x) >>> y = C.sequence.scatter(t, b) >>> # create one sequence of 4 tensors each with shape (3,2) >>> x0 = np.reshape(np.arange(24.0,dtype=np.float32),(1,4,3,2)) >>> y.eval({x:x0}) [array([[[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]]], dtype=float32)] Args: seq: the symbolic sequence from which elements will be copied in the output condition: the symbolic sequence which denotes the locations where elements should be copied new_sequence_axis_typeinfo: tuple of integers indicating the scaling and additive factors for the length of the new sequence axis w.r.t. the condition sequence. This is used to determine the sequence axis to be used for the output of the gather operation. If this argument is left unspecified a new independent sequence axis is created. name (str): the name of the node in the network Returns: :class:`~cntk.ops.functions.Function` ''' from cntk.cntk_py import scatter seq = sanitize_input(seq, get_data_type(seq)) condition = sanitize_input(condition, get_data_type(condition)) if new_sequence_axis_typeinfo is None: return scatter(seq, condition, name) else: return scatter(seq, condition, new_sequence_axis_typeinfo, name)
def scatter(seq, condition, name=''): ''' Performs the inverse of gather: The sequence `seq` must have as many elements as the number of True values in the sequence `condition`. It will return a sequence whose length is the same as the `condition` sequence with zeroes everywhere except for the locations where `condition` evaluates to True in which case it will copy the elements from `seqz preserving their order. Example: >>> import cntk.ops as C >>> import numpy as np >>> x = C.input_variable(shape=(3,2)) >>> t = C.sequence.last(x) >>> b = C.sequence.is_first(x) >>> y = C.sequence.scatter(t, b) >>> x0 = np.reshape(np.arange(24.0,dtype=np.float32),(4,3,2)) >>> y.eval({x:x0}) array([[[[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]]]], dtype=float32) Args: seq: the symbolic sequence from which elements will be copied in the output condition: the symbolic sequence which denotes the locations where elements should be copied name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import scatter seq = sanitize_input(seq, get_data_type(seq)) condition = sanitize_input(condition, get_data_type(condition)) return scatter(seq, condition, name)
def scatter(seq, condition, name=''): ''' Performs the inverse of gather. The sequence ``seq`` must have as many elements as the number of True values in the sequence ``condition``. It will return a sequence whose length is the same as the ``condition`` sequence with zeroes everywhere except for the locations where ``condition`` evaluates to True in which case it will copy the elements from ``seq`` preserving their order. Example: >>> import cntk.ops as C >>> import numpy as np >>> x = C.input_variable(shape=(3,2)) >>> t = C.sequence.last(x) >>> b = C.sequence.is_first(x) >>> y = C.sequence.scatter(t, b) >>> x0 = np.reshape(np.arange(24.0,dtype=np.float32),(4,3,2)) >>> y.eval({x:x0}) array([[[[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]], <BLANKLINE> [[ 0., 0.], [ 0., 0.], [ 0., 0.]]]], dtype=float32) Args: seq: the symbolic sequence from which elements will be copied in the output condition: the symbolic sequence which denotes the locations where elements should be copied name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import scatter seq = sanitize_input(seq, get_data_type(seq)) condition = sanitize_input(condition, get_data_type(condition)) return scatter(seq, condition, name)
def scatter(operand, condition, name=''): ''' TBA Example: TBA Args: operand: the symbolic tensor operand denoting a sequence condition: the symbolic tensor operand denoting a boolean condition flag for each step of a sequence name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import scatter operand = sanitize_input(operand, get_data_type(operand)) condition = sanitize_input(condition, get_data_type(condition)) return scatter(operand, condition, name)