Expand description
The ndarray
crate provides an n-dimensional container for general elements
and for numerics.
In n-dimensional we include, for example, 1-dimensional rows or columns, 2-dimensional matrices, and higher dimensional arrays. If the array has n dimensions, then an element in the array is accessed by using that many indices. Each dimension is also called an axis.
To get started, functionality is provided in the following core types:
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. - A reference type,
ArrayRef
, that contains most of the functionality for reading and writing to arrays. - A reference type,
LayoutRef
, that contains most of the functionality for reading and writing to array layouts: their shape and strides.
§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
. Zip
for lock step function application across two or more arrays or other item producers (NdProducer
trait).
§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.
- Note that functions/methods/traits/etc. hidden from the docs are not considered part of the public API, so changes to them are not considered breaking changes.
-
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()
,.zip_mut_with()
,Zip
andazip!()
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.
-
MSRV: Requires Rust 1.64 or later
§Crate Feature Flags
The following crate feature flags are available. They are configured in your
Cargo.toml
. See doc::crate_feature_flags
for more information.
std
: Rust standard library-using functionality (enabled by default)serde
: serialization support for serde 1.xrayon
: Parallel iterators, parallelized methods, theparallel
module andpar_azip!
.approx
Implementations of traits from theapprox
crate.blas
: transparent BLAS support for matrix multiplication, needs configuration.matrixmultiply-threading
: Use threading frommatrixmultiply
.
§Documentation
-
The docs for
ArrayBase
provide an overview of the n-dimensional array type. Other good pages to look at are the documentation for thes![]
andazip!()
macros. -
If you have experience with NumPy, you may also be interested in
ndarray_for_numpy_users
.
§The ndarray ecosystem
ndarray
provides a lot of functionality, but it’s not a one-stop solution.
ndarray
includes matrix multiplication and other binary/unary operations out of the box.
More advanced linear algebra routines (e.g. SVD decomposition or eigenvalue computation)
can be found in ndarray-linalg
.
The same holds for statistics: ndarray
provides some basic functionalities (e.g. mean
)
but more advanced routines can be found in ndarray-stats
.
If you are looking to generate random arrays instead, check out ndarray-rand
.
For conversion between ndarray
, nalgebra
and
image
check out nshare
.
Modules§
- doc
docsrs
- Standalone documentation pages.
- iter
- Producers, iterables and iterators.
- linalg
- Linear algebra.
- parallel
rayon
- Parallelization features for ndarray.
- prelude
- ndarray prelude.
Macros§
- array
- Create an
Array
with one, two, three, four, five, or six dimensions. - azip
- Array zip macro: lock step function application across several arrays and producers.
- concatenate
- Concatenate arrays along the given axis.
- par_
azip - Parallelized array zip macro: lock step function application across several arrays and producers.
- s
- Slice argument constructor.
- stack
- Stack arrays along the new axis.
Structs§
- Array
Base - An n-dimensional array.
- Array
Ref - A reference to an n-dimensional array whose data is safe to read and write.
- Axis
- An axis index.
- Axis
Description - Description of the axis, its length and its stride.
- Dim
- Dimension description.
- IxDyn
Impl - Dynamic dimension or index type.
- Layout
Ref - A reference to the layout of an n-dimensional array.
- Linspace
std
- An iterator of a sequence of evenly spaced floats.
- Logspace
std
- An iterator of a sequence of logarithmically spaced number.
- Math
Cell - A transparent wrapper of
Cell<T>
which is identical in every way, except it will implement arithmetic operators as well. - NewAxis
- Token to represent a new axis in a slice description.
- Owned
ArcRepr - ArcArray’s representation.
- Owned
Repr - Array’s representation.
- RawRef
- A reference to an n-dimensional array whose data is not safe to read or write.
- RawView
Repr - Array pointer’s representation.
- Shape
- A contiguous array shape of n dimensions.
- Shape
Error - An error related to array shape or layout.
- Slice
- A slice (range with step size).
- Slice
Info - Represents all of the necessary information to perform a slice.
- Stride
Shape - An array shape of n dimensions in c-order, f-order or custom strides.
- View
Repr - Array view’s representation.
- Zip
- Lock step function application across several arrays or other producers.
Enums§
- CowRepr
- CowArray’s representation.
- Error
Kind - Error code for an error related to array shape or layout.
- Fold
While - Value controlling the execution of
.fold_while
onZip
. - Mesh
Index - The indexing order for
meshgrid
; see there for more details. - Order
- Array order
- Slice
Info Elem - A slice (range with step), an index, or a new axis token.
Traits§
- AsArray
- Argument conversion into an array view
- Assign
Elem - A producer element that can be assigned to once
- Data
- Array representation trait.
- DataMut
- Array representation trait.
- Data
Owned - Array representation trait.
- Data
Shared - Array representation trait.
- DimAdd
- Adds the two dimensions at compile time.
- DimMax
- A trait to specify when one dimension is strictly larger than another.
- Dimension
- Array shape and index trait.
- Index
Longer - Extra indexing methods for array views
- Into
Dimension - Argument conversion a dimension.
- Into
NdProducer - Argument conversion into a producer.
- Linalg
Scalar - Elements that support linear algebra operations.
- Multi
Slice Arg - Slicing information describing multiple mutable, disjoint slices.
- NdFloat
std
- Floating-point element types
f32
andf64
. - NdIndex
- Tuple or fixed size arrays that can be used to index an array.
- NdProducer
- A producer of an n-dimensional set of elements; for example an array view, mutable array view or an iterator that yields chunks.
- RawData
- Array representation trait.
- RawData
Clone - Array representation trait.
- RawData
Mut - Array representation trait.
- RawData
Subst - Array representation trait.
- Remove
Axis - Array shape with a next smaller dimension.
- Scalar
Operand - Elements that can be used as direct operands in arithmetic with arrays.
- Shape
Arg - Array shape argument with optional order parameter
- Shape
Builder - A trait for
Shape
andD where D: Dimension
that allows customizing the memory layout (strides) of an array shape. - Slice
Arg - A type that can slice an array of dimension
D
.
Functions§
- Dim
- Create a new dimension value.
- Ix0
- Create a zero-dimensional index
- Ix1
- Create a one-dimensional index
- Ix2
- Create a two-dimensional index
- Ix3
- Create a three-dimensional index
- Ix4
- Create a four-dimensional index
- Ix5
- Create a five-dimensional index
- Ix6
- Create a six-dimensional index
- IxDyn
- Create a dynamic-dimensional index
- arr0
- Create a zero-dimensional array with the element
x
. - arr1
- Create a one-dimensional array with elements from
xs
. - arr2
- Create a two-dimensional array with elements from
xs
. - arr3
- Create a three-dimensional array with elements from
xs
. - aview0
- Create a zero-dimensional array view borrowing
x
. - aview1
- Create a one-dimensional array view with elements borrowing
xs
. - aview2
- Create a two-dimensional array view with elements borrowing
xs
. - aview_
mut1 - Create a one-dimensional read-write array view with elements borrowing
xs
. - aview_
mut2 - Create a two-dimensional read-write array view with elements borrowing
xs
. - concatenate
- Concatenate arrays along the given axis.
- indices
- Create an iterable of the array shape
shape
. - indices_
of - Return an iterable of the indices of the passed-in array.
- linspace
std
- Return an iterator of evenly spaced floats.
- logspace
std
- An iterator of a sequence of logarithmically spaced numbers.
- meshgrid
- Create coordinate matrices from coordinate vectors.
- range
std
- Return an iterator of floats from
a
tob
(exclusive), incrementing bystep
. - rcarr1
- Create a one-dimensional array with elements from
xs
. - rcarr2
- Create a two-dimensional array with elements from
xs
. - rcarr3
- Create a three-dimensional array with elements from
xs
. - stack
- Stack arrays along the new axis.
Type Aliases§
- ArcArray
- An array where the data has shared ownership and is copy on write.
- ArcArray1
- one-dimensional shared ownership array
- ArcArray2
- two-dimensional shared ownership array
- Array
- An array that owns its data uniquely.
- Array0
- zero-dimensional array
- Array1
- one-dimensional array
- Array2
- two-dimensional array
- Array3
- three-dimensional array
- Array4
- four-dimensional array
- Array5
- five-dimensional array
- Array6
- six-dimensional array
- ArrayD
- dynamic-dimensional array
- Array
Ref0 - zero-dimensional array reference
- Array
Ref1 - one-dimensional array reference
- Array
Ref2 - two-dimensional array reference
- Array
Ref3 - three-dimensional array reference
- Array
Ref4 - four-dimensional array reference
- Array
Ref5 - five-dimensional array reference
- Array
Ref6 - six-dimensional array reference
- Array
RefD - dynamic-dimensional array reference
- Array
View - A read-only array view.
- Array
View0 - zero-dimensional array view
- Array
View1 - one-dimensional array view
- Array
View2 - two-dimensional array view
- Array
View3 - three-dimensional array view
- Array
View4 - four-dimensional array view
- Array
View5 - five-dimensional array view
- Array
View6 - six-dimensional array view
- Array
ViewD - dynamic-dimensional array view
- Array
View Mut - A read-write array view.
- Array
View Mut0 - zero-dimensional read-write array view
- Array
View Mut1 - one-dimensional read-write array view
- Array
View Mut2 - two-dimensional read-write array view
- Array
View Mut3 - three-dimensional read-write array view
- Array
View Mut4 - four-dimensional read-write array view
- Array
View Mut5 - five-dimensional read-write array view
- Array
View Mut6 - six-dimensional read-write array view
- Array
View MutD - dynamic-dimensional read-write array view
- CowArray
- An array with copy-on-write behavior.
- Ix
- Array index type
- Ix0
- zero-dimensionial
- Ix1
- one-dimensional
- Ix2
- two-dimensional
- Ix3
- three-dimensional
- Ix4
- four-dimensional
- Ix5
- five-dimensional
- Ix6
- six-dimensional
- IxDyn
- dynamic-dimensional
- Ixs
- Array index type (signed)
- Layout
Ref0 - zero-dimensional layout reference
- Layout
Ref1 - one-dimensional layout reference
- Layout
Ref2 - two-dimensional layout reference
- Layout
Ref3 - three-dimensional layout reference
- Layout
Ref4 - four-dimensional layout reference
- Layout
Ref5 - five-dimensional layout reference
- Layout
Ref6 - six-dimensional layout reference
- Layout
RefD - dynamic-dimensional layout reference
- RawArray
View - A read-only array view without a lifetime.
- RawArray
View Mut - A mutable array view without a lifetime.