Crate tract_core::internal::tract_ndarray
source · [−]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.
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 usingArrayView::fromandArrayViewMut::from. Zipfor lock step function application across two or more arrays or other item producers (NdProducertrait).
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(),Zipandazip!()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.
- Requires Rust 1.49 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, the [parallel] module and [par_azip!].approxImplementations of traits from version 0.4 of the [approx] crate.approx-0_5: Implementations of traits from version 0.5 of the [approx] crate.blas: transparent BLAS support for matrix multiplication, needs configuration.matrixmultiply-threading: Use threading frommatrixmultiply.
Documentation
-
The docs for
ArrayBaseprovide 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
Macros
Structs
Cell<T> which is identical in every way, except
it will implement arithmetic operators as well.Enums
.fold_while on Zip.Traits
f32 and f64.Shape and D where D: Dimension that allows
customizing the memory layout (strides) of an array shape.D.Functions
x.xs.xs.xs.x.xs.xs.xs.xs.shape.xs.xs.xs.