The ndarray
crate provides an N-dimensional container for general elements
and for numerics.
ArrayBase
: The N-dimensional array type itself.Array
: An array where the data is owned uniquely.RcArray
: An array where the data has shared ownership and is copy on write.ArrayView
,ArrayViewMut
: Lightweight array views.
Highlights
- Generic N-dimensional array
- Slicing, also with arbitrary step size, and negative indices to mean elements from the end of the axis.
- There is both a copy on write array (
RcArray
), or a regular uniquely owned array (Array
), and both can use read-only and read-write array views. - Iteration and most operations are efficient on arrays with contiguous innermost dimension.
- Array views can be used to slice and mutate any
[T]
data usingArrayView::from
andArrayViewMut::from
.
Crate Status
- Still iterating on and evolving the API
- The crate is continuously developing, and breaking changes are expected during evolution from version to version. We adhere to semver, but alpha releases break at will.
- We adopt the newest stable rust features we need.
- Performance status:
- 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).
- Arithmetic optimizes very well if the arrays are have contiguous inner dimension.
- 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. .iter()
is efficient for c-contiguous arrays.- Can use BLAS in some operations (
dot
andmat_mul
).
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. Pluggable
backend via
blas-sys
.