blob: dd0286d092f679cddeb663f03a92c1e8cb523e1f [file] [log] [blame]
# 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 on **CPU**.
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)
<class 'mxnet.ndarray.sparse.CSRNDArray'>
>>> 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:https://mxnet.incubator.apache.org/versions/master/tutorials/sparse/csr.html).
<br>
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)
<class 'mxnet.ndarray.sparse.RowSparseNDArray'>
>>> 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).
<br><br>
```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 specialized implementations in ``mxnet.ndarray.sparse``.
Operators such as Convolution and broadcasting do not have sparse implementations yet.
- 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.
- GPU support for ``mxnet.ndarray.sparse`` is experimental. Only a few sparse operators are supported on GPU such as ``sparse.dot``.
.. 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
```
### Powers
```eval_rst
.. autosummary::
:nosignatures:
CSRNDArray.square
```
### Indexing
```eval_rst
.. autosummary::
:nosignatures:
CSRNDArray.__getitem__
CSRNDArray.__setitem__
CSRNDArray.slice
```
### 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 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.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
```
## Mathematical functions
### Arithmetic operations
```eval_rst
.. autosummary::
:nosignatures:
elemwise_add
elemwise_sub
elemwise_mul
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
```
### 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
ftrl_update
```
### More
```eval_rst
.. autosummary::
:nosignatures:
make_loss
stop_gradient
mxnet.ndarray.contrib.SparseEmbedding
```
## API Reference
<script type="text/javascript" src='../../../_static/js/auto_module_index.js'></script>
```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, __neg__, sum, mean, square, __getitem__, __setitem__, check_format
.. 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__, __getitem__, __setitem__, check_format, retain, 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
```
<script>auto_index("api-reference");</script>