81 releases
0.14.0  Nov 28, 2020 

0.13.1  Apr 21, 2020 
0.13.0  Sep 23, 2019 
0.12.1  Nov 21, 2018 
0.3.0alpha.1  Dec 27, 2015 
#8 in Data structures
62,167 downloads per month
Used in 421 crates
(311 directly)
680KB
13K
SLoC
ndarray
implements an ndimensional container for general elements and for
numerics.
In ndimensional we include for example 1dimensional rows or columns, 2dimensional matrices, and higher dimensional arrays. If the array has n dimensions, then an element in the array is accessed by using that many indices. Each dimension is also called an axis.
Highlights
 Generic ndimensional array
 Slicing, also with arbitrary step size, and negative indices to mean elements from the end of the axis.
 Views and subviews of arrays; iterators that yield subviews.
 Higher order operations and arithmetic are performant
 Array views can be used to slice and mutate any
[T]
data usingArrayView::from
andArrayViewMut::from
. Zip
for lock step function application across two or more arrays or other item producers (NdProducer
trait).
lib.rs
:
The ndarray
crate provides an ndimensional container for general elements
and for numerics.
In ndimensional we include for example 1dimensional rows or columns, 2dimensional matrices, and higher dimensional arrays. If the array has n dimensions, then an element in the array is accessed by using that many indices. Each dimension is also called an axis.
ArrayBase
: The ndimensional array type itself.
It is used to implement both the owned arrays and the views; see its docs for an overview of all array features. The main specific array type is
Array
, which owns its elements.
Highlights
 Generic ndimensional array
 Slicing, also with arbitrary step size, and negative indices to mean elements from the end of the axis.
 Views and subviews of arrays; iterators that yield subviews.
 Higher order operations and arithmetic are performant
 Array views can be used to slice and mutate any
[T]
data usingArrayView::from
andArrayViewMut::from
. Zip
for lock step function application across two or more arrays or other item producers (NdProducer
trait).
Crate Status
 Still iterating on and evolving the crate
 The crate is continuously developing, and breaking changes are expected during evolution from version to version. We adopt the newest stable rust features if we need them.
 Note that functions/methods/traits/etc. hidden from the docs are not considered part of the public API, so changes to them are not considered breaking changes.
 Performance:
 Prefer higher order methods and arithmetic operations on arrays first, then iteration, and as a last priority using indexed algorithms.
 The higher order functions like
.map()
,.map_inplace()
,.zip_mut_with()
, [Zip
] andazip!()
are the most efficient ways to perform single traversal and lock step traversal respectively.  Performance of an operation depends on the memory layout of the array or array view. Especially if it's a binary operation, which needs matching memory layout to be efficient (with some exceptions).
 Efficient floating point matrix multiplication even for very large matrices; can optionally use BLAS to improve it further.
 Requires Rust 1.42 or later
Crate Feature Flags
The following crate feature flags are available. They are configured in your
Cargo.toml
.
serde
 Optional, compatible with Rust stable
 Enables serialization support for serde 1.x
rayon
 Optional, compatible with Rust stable
 Enables parallel iterators, parallelized methods and [
par_azip!
].
approx
 Optional, compatible with Rust stable
 Enables implementations of traits from the [
approx
] crate.
blas
 Optional and experimental, compatible with Rust stable
 Enable transparent BLAS support for matrix multiplication.
Uses
blassrc
for pluggable backend, which needs to be configured separately.
Documentation

The docs for
ArrayBase
provide an overview of the ndimensional array type. Other good pages to look at are the documentation for thes![]
andazip!()
macros. 
If you have experience with NumPy, you may also be interested in
ndarray_for_numpy_users
.
The ndarray ecosystem
ndarray
provides a lot of functionality, but it's not a onestop solution.
ndarray
includes matrix multiplication and other binary/unary operations out of the box.
More advanced linear algebra routines (e.g. SVD decomposition or eigenvalue computation)
can be found in ndarraylinalg
.
The same holds for statistics: ndarray
provides some basic functionalities (e.g. mean
)
but more advanced routines can be found in ndarraystats
.
If you are looking to generate random arrays instead, check out ndarrayrand
.
For conversion between ndarray
, nalgebra
and
image
check out nshare
.
Dependencies
~335–740KB
~15K SLoC