ndarray 0.7.0

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. 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 using ArrayView::from and ArrayViewMut::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. Pluggable backend via blas-sys.