ndarray is a Rust library providing an n-dimensional array. It has been in furious development, and now we are ready to release the next version which has many improvements.
One of the most fundamental additions, contributed by @vbarrielle, is
better support for chunking and splitting array views.
ArrayViewMut learned the new method
.split_at(Axis, Ix) that
splits the view, modelled on
.split_at(_mut) for slices.
Creating a 3 × 5 × 5 array with ndarray looks like this:
This uses the new constructor
range (contributed by @palango),
.unwrap() which will panic if the array does not have the
correct number of elements for the new shape.
Splitting the array along an axis looks like this:
.split_at() uses the new newtype
Axis for the first argument, which all
axis arguments now use in version 0.4. The split views borrow from the original
array, but can be sent to separate threads. (Naturally we have an eye
on integration with rayon!)
Easier to be Generic
Version 0.4 adds the trait
NdFloat, defined for only
which makes it easy to include the extra trait bounds needed for some
Any is used for old school type-based specialization for
linear algebra (only
.dot() implemented so far), and
needed for technical reasons to implement both array + array and
array + scalar at the same time.
ArrayViewMut now implement
From, so that you can
convert from slices and array references into array views. These
conversion implementations are wrapped up into an even simpler form
.scalar_sum() uses a manually unrolled loop so that it
can be autovectorized by the compiler, despite the float accuracy
rules that prevent a simple summation loop to be optimized that way,
so this function may be a drop in win.
There were a lot more improvements, some breaking changes and some deprecations. See the full change log for more information!
Furious development will hopefully continue. Rust 1.8 is around the corner,
and with it the assignment operators (
*= etc) are finally stable.
We will deprecate our old equivalent methods (
imul etc) at