ndarray 0.4.0-alpha.5

An N-dimensional array for general elements and for numerics. Lightweight array views and slicing. Supports both uniquely owned and shared copy-on-write arrays similar to numpy’s ndarray. `rblas` is an optional dependency.

The ndarray crate provides an N-dimensional container similar to numpy’s ndarray.

  • ArrayBase: The N-dimensional array type itself.
  • OwnedArray: An array where the data is owned uniquely.
  • RcArray: An array where the data is shared and copy on write, it can act as both an owner of the data as well as a lightweight view.
  • 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 (OwnedArray), 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 aview1 and aview_mut1.

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. In place methods like iadd will be deprecated when Rust supports += and similar in Rust 1.8.
    • We try to introduce more static checking gradually.
  • Performance status:
    • Arithmetic involving arrays of contiguous inner dimension optimizes very well.
    • .fold() and .zip_mut_with() are the most efficient ways to perform single traversal and lock step traversal respectively.
    • .iter() and .iter_mut() are efficient for contiguous arrays.
  • There is experimental bridging to the linear algebra package rblas.

Crate Feature Flags

The following crate feature flags are available. The are specified in Cargo.toml.

  • assign_ops
    • Optional, requires nightly
    • Enables the compound assignment operators
  • rustc-serialize
    • Optional, stable
    • Enables serialization support
  • rblas
    • Optional, stable
    • Enables rblas integration