The ndarray
crate provides an N-dimensional container for general elements
and for numerics.
ArrayBase
: The N-dimensional 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 N-dimensional 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
.
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.
- 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()
and.zip_mut_with()
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.
Crate Feature Flags
The following crate feature flags are available. They are configured in your
Cargo.toml
.
rustc-serialize
- Optional, compatible with Rust stable
- Enables serialization support for rustc-serialize 0.3
serde
- Optional, compatible with Rust stable
- Enables serialization support for serde 0.8
blas
- Optional and experimental, compatible with Rust stable
- Enable transparent BLAS support for matrix multiplication.
Uses
blas-sys
for pluggable backend, which needs to be configured separately.