class nbla::ScatterNd

template<typename T>
class ScatterNd : public nbla::BaseFunction<const vector<int>&, bool>

Scatter `data` into a new array of given `shape` according to `indices`.

This operation is the inverse of :func:`~nnabla.functions.gather_nd`.

The forward of :func:`~nnabla.functions.scatter_nd` is equivalent to:

def scatter_nd(data, indices, shape):
    import numpy as np
    if isinstance(indices, np.ndarray)
        indices = indices.tolist()
    result = np.zeros(shape, dtype=data.dtype)
    result[indices] = data
    return result

Examples:

  inputs:
    data:
      doc: N-D array input data.
    indices:
      doc: N-D array scatter indices.
  arguments:
    shape:
      doc: Shape of output variable.
      type: repeated int64
  outputs:
    y:
      doc: N-D array of given `shape`.

Inputs:

  • N-D array input data

  • N-D array scatter indices

Outputs:

  • N-D array of given `shape`

Param shape:

Shape of output variable.

Public Functions

inline virtual shared_ptr<Function> copy() const

Copy another instance of Function with the same context.

inline virtual int min_inputs()

Get minimum number of inputs.

This is meant to be used in setup function with in_types which is used to get maximum number of inputs.

inline virtual int min_outputs()

Get minimum number of outputs.

This is meant to be used in setup function with out_types which is used to get max number of outputs.

inline virtual vector<dtypes> in_types()

Get input dtypes.

Last in_type will be used repeatedly if size of in_types is smaller than size of inputs

inline virtual vector<dtypes> out_types()

Get output dtypes.

Last out_type will be used repeatedly if size of out_types is smaller than size of outputs

inline virtual vector<string> allowed_array_classes()

Get array classes that are allowed to be specified by Context.

inline virtual string name()

Get function name in string.

inline virtual int inplace_data(int i) const

Get in-place-level of i-th input variable’s data (see below).

0 (NOT_INPLACE): Not in-placed 1 (INPLACE_NOT_MODIFY): In-placed but not modified. 2 (INPLACE): In-placed and modified.

Note

If a subclass uses in-place computation, the function must override this function.

Parameters:

i[in] Input variable index.

Return values:

Returns – 0 by default.

inline virtual int inplace_data_with(int i) const

Get the output variable index where i-th variables’ data in-placed to.

Note

This is only valid if the i-th variable is in-placed. The maintainer of a sub-class function must override this function.

Parameters:

i[in] Input variable index.

inline virtual bool grad_depends_output_data(int i, int o) const

Dependency flag for checking if in-grad depends on out-data.

Checking if i-th input’ gradient computation requires o-th output’s data or not.

Note

If any of inputs requires an output variable data when computing its gradient, this function must be overridden to return appropriate boolean value. Otherwise, backward computation will be incorrect.

Parameters:
  • i[in] Input variable index.

  • o[in] Output variable index.