# Sparse NDArray API ```eval_rst .. currentmodule:: mxnet.ndarray.sparse ``` ## Overview This document lists the routines of the *n*-dimensional sparse array package: ```eval_rst .. autosummary:: :nosignatures: mxnet.ndarray.sparse ``` The `CSRNDArray` and `RowSparseNDArray` API, defined in the `ndarray.sparse` package, provides imperative sparse tensor operations. An `CSRNDArray` inherits from `NDArray`, and represents a two-dimensional, fixed-size array in compressed sparse row format. ```python >>> x = mx.nd.array([[1, 0], [0, 0], [2, 3]]) >>> csr = x.tostype('csr') >>> type(csr) >>> csr.shape (3, 2) >>> csr.data.asnumpy() array([ 1. 2. 3.], dtype=float32) >>> csr.indices.asnumpy() array([0, 0, 1]) >>> csr.indptr.asnumpy() array([0, 1, 1, 3]) >>> csr.stype 'csr' ``` A detailed tutorial is available at [CSRNDArray - NDArray in Compressed Sparse Row Storage Format](https://mxnet.incubator.apache.org/versions/master/tutorials/sparse/csr.html).
An `RowSparseNDArray` inherits from `NDArray`, and represents a multi-dimensional, fixed-size array in row sparse format. ```python >>> x = mx.nd.array([[1, 0], [0, 0], [2, 3]]) >>> row_sparse = x.tostype('row_sparse') >>> type(row_sparse) >>> row_sparse.data.asnumpy() array([[ 1. 0.], [ 2. 3.]], dtype=float32) >>> row_sparse.indices.asnumpy() array([0, 2]) >>> row_sparse.stype 'row_sparse' ``` A detailed tutorial is available at [RowSparseNDArray - NDArray for Sparse Gradient Updates](https://mxnet.incubator.apache.org/versions/master/tutorials/sparse/row_sparse.html).

```eval_rst .. note:: ``mxnet.ndarray.sparse`` is similar to ``mxnet.ndarray`` in some aspects. But the differences are not negligible. For instance: - Only a subset of operators in ``mxnet.ndarray`` have efficient sparse implementations in ``mxnet.ndarray.sparse``. - If an operator do not occur in the ``mxnet.ndarray.sparse`` namespace, that means the operator does not have an efficient sparse implementation yet. If sparse inputs are passed to such an operator, it will convert inputs to the dense format and fallback to the already available dense implementation. - The storage types (``stype``) of sparse operators' outputs depend on the storage types of inputs. By default the operators not available in ``mxnet.ndarray.sparse`` infer "default" (dense) storage type for outputs. Please refer to the [API Reference](#api-reference) section for further details on specific operators. .. note:: ``mxnet.ndarray.sparse.CSRNDArray`` is similar to ``scipy.sparse.csr_matrix`` in some aspects. But they differ in a few aspects: - In MXNet the column indices (``CSRNDArray.indices``) for a given row are expected to be **sorted in ascending order**. Duplicate column entries for the same row are not allowed. - ``CSRNDArray.data``, ``CSRNDArray.indices`` and ``CSRNDArray.indptr`` always create deep copies, while it's not the case in ``scipy.sparse.csr_matrix``. ``` In the rest of this document, we first overview the methods provided by the `ndarray.sparse.CSRNDArray` class and the `ndarray.sparse.RowSparseNDArray` class, and then list other routines provided by the `ndarray.sparse` package. The `ndarray.sparse` package provides several classes: ```eval_rst .. autosummary:: :nosignatures: CSRNDArray RowSparseNDArray ``` We summarize the interface for each class in the following sections. ## The `CSRNDArray` class ### Array attributes ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.shape CSRNDArray.context CSRNDArray.dtype CSRNDArray.stype CSRNDArray.data CSRNDArray.indices CSRNDArray.indptr ``` ### Array conversion ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.copy CSRNDArray.copyto CSRNDArray.as_in_context CSRNDArray.asscipy CSRNDArray.asnumpy CSRNDArray.asscalar CSRNDArray.astype CSRNDArray.tostype ``` ### Array inspection ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.check_format ``` ### Array creation ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.zeros_like ``` ### Array reduction ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.sum CSRNDArray.mean CSRNDArray.norm ``` ### Array rounding ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.round CSRNDArray.rint CSRNDArray.fix CSRNDArray.floor CSRNDArray.ceil CSRNDArray.trunc ``` ### Trigonometric functions ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.sin CSRNDArray.tan CSRNDArray.arcsin CSRNDArray.arctan CSRNDArray.degrees CSRNDArray.radians ``` ### Hyperbolic functions ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.sinh CSRNDArray.tanh CSRNDArray.arcsinh CSRNDArray.arctanh ``` ### Exponents and logarithms ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.expm1 CSRNDArray.log1p ``` ### Powers ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.sqrt CSRNDArray.square ``` ### Joining arrays ```eval_rst .. autosummary:: :nosignatures: concat ``` ### Indexing ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.__getitem__ CSRNDArray.__setitem__ CSRNDArray.slice ``` ### Miscellaneous ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.abs CSRNDArray.clip CSRNDArray.sign ``` ### Lazy evaluation ```eval_rst .. autosummary:: :nosignatures: CSRNDArray.wait_to_read ``` ## The `RowSparseNDArray` class ### Array attributes ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.shape RowSparseNDArray.context RowSparseNDArray.dtype RowSparseNDArray.stype RowSparseNDArray.data RowSparseNDArray.indices ``` ### Array conversion ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.copy RowSparseNDArray.copyto RowSparseNDArray.as_in_context RowSparseNDArray.asnumpy RowSparseNDArray.asscalar RowSparseNDArray.astype RowSparseNDArray.tostype ``` ### Array inspection ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.check_format ``` ### Array creation ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.zeros_like ``` ### Array reduction ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.norm ``` ### Array rounding ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.round RowSparseNDArray.rint RowSparseNDArray.fix RowSparseNDArray.floor RowSparseNDArray.ceil RowSparseNDArray.trunc ``` ### Trigonometric functions ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.sin RowSparseNDArray.tan RowSparseNDArray.arcsin RowSparseNDArray.arctan RowSparseNDArray.degrees RowSparseNDArray.radians ``` ### Hyperbolic functions ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.sinh RowSparseNDArray.tanh RowSparseNDArray.arcsinh RowSparseNDArray.arctanh ``` ### Exponents and logarithms ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.expm1 RowSparseNDArray.log1p ``` ### Powers ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.sqrt RowSparseNDArray.square ``` ### Indexing ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.__getitem__ RowSparseNDArray.__setitem__ RowSparseNDArray.retain ``` ### Lazy evaluation ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.wait_to_read ``` ### Miscellaneous ```eval_rst .. autosummary:: :nosignatures: RowSparseNDArray.abs RowSparseNDArray.clip RowSparseNDArray.sign ``` ## Array creation routines ```eval_rst .. autosummary:: :nosignatures: array empty zeros zeros_like csr_matrix row_sparse_array mxnet.ndarray.load mxnet.ndarray.save ``` ## Array manipulation routines ### Changing array storage type ```eval_rst .. autosummary:: :nosignatures: cast_storage ``` ### Indexing routines ```eval_rst .. autosummary:: :nosignatures: slice retain where ``` ## Mathematical functions ### Arithmetic operations ```eval_rst .. autosummary:: :nosignatures: elemwise_add elemwise_sub elemwise_mul broadcast_add broadcast_sub broadcast_mul broadcast_div negative dot add_n ``` ### Trigonometric functions ```eval_rst .. autosummary:: :nosignatures: sin tan arcsin arctan degrees radians ``` ### Hyperbolic functions ```eval_rst .. autosummary:: :nosignatures: sinh tanh arcsinh arctanh ``` ### Reduce functions ```eval_rst .. autosummary:: :nosignatures: sum mean norm ``` ### Rounding ```eval_rst .. autosummary:: :nosignatures: round rint fix floor ceil trunc ``` ### Exponents and logarithms ```eval_rst .. autosummary:: :nosignatures: expm1 log1p ``` ### Powers ```eval_rst .. autosummary:: :nosignatures: sqrt square ``` ### Miscellaneous ```eval_rst .. autosummary:: :nosignatures: abs sign ``` ## Neural network ### Updater ```eval_rst .. autosummary:: :nosignatures: sgd_update sgd_mom_update adam_update adagrad_update ``` ### More ```eval_rst .. autosummary:: :nosignatures: make_loss stop_gradient Embedding LinearRegressionOutput LogisticRegressionOutput ``` ## API Reference ```eval_rst .. autoclass:: mxnet.ndarray.sparse.CSRNDArray :members: shape, context, dtype, stype, data, indices, indptr, copy, copyto, as_in_context, asscipy, asnumpy, asscalar, astype, tostype, slice, wait_to_read, zeros_like, round, rint, fix, floor, ceil, trunc, sin, tan, arcsin, arctan, degrees, radians, sinh, tanh, arcsinh, arctanh, expm1, log1p, sqrt, square, __neg__, sum, mean, norm, square, __getitem__, __setitem__, check_format, abs, clip, sign .. autoclass:: mxnet.ndarray.sparse.RowSparseNDArray :members: shape, context, dtype, stype, data, indices, copy, copyto, as_in_context, asnumpy, asscalar, astype, tostype, wait_to_read, zeros_like, round, rint, fix, floor, ceil, trunc, sin, tan, arcsin, arctan, degrees, radians, sinh, tanh, arcsinh, arctanh, expm1, log1p, sqrt, square, __negative__, norm, __getitem__, __setitem__, check_format, retain, abs, clip, sign .. automodule:: mxnet.ndarray.sparse :members: :special-members: :exclude-members: BaseSparseNDArray, RowSparseNDArray, CSRNDArray .. automodule:: mxnet.ndarray.sparse :members: array, zeros, empty .. automodule:: mxnet.ndarray :members: load, save ```