ndarray 0.6.8

An N-dimensional array for general elements and for numerics. Lightweight array views and slicing; views support chunking and splitting.

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.


  • 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 using ArrayView::from and ArrayViewMut::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 matrix multiplication.

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.