PackageTrack
Sign in Get early access

ndarray

An n-dimensional array for general elements and for numerics. Lightweight array views and slicing; views support chunking and splitting.

0.17.2 113M downloads/mo #745 most downloaded on crates.io rust-ndarray/ndarray

What this package is like to depend on

Last release 7 months ago

10 Jan 2026

Release timing varies

gaps range from 1 weeks to 2.0 years

Some releases are documented

notes for 19 of 72 stable releases

1 version withdrawn

withdrawn after publishing

11 years old

93 releases · first in 2015

3 releases in the last 12 months

see the full history below

Release timeline

93 releases · Dec 2015 to Jan 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 93
  1. 0.17.2 10 Jan 2026
    Release notes

    Version 0.17.2 is mainly a patch fix to bugs related to the new ArrayRef implementation.

    In addition, ndarray has reduced its packaging footprint to ease supply chain reviews (and shrink the binary size!).
    A special thanks to @SwishSwushPow and @weiznich for bringing this to our attention and making the necessary changes.

    Added

    Fixed

    Documentation

    Open source →
    Release notes

    Version 0.17.2 is mainly a patch fix to bugs related to the new ArrayRef implementation.

    In addition, ndarray has reduced its packaging footprint to ease supply chain reviews (and shrink the binary size!). A special thanks to @SwishSwushPow and @weiznich for bringing this to our attention and making the necessary changes.

    Added

    Fixed

    • Add PartialEq implementations between ArrayRef and ArrayBase by @akern40 #1557
    • Implement Sync for ArrayParts by @gaumut #1552

    Documentation

    Open source →
  2. 0.17.1 02 Nov 2025
    Release notes

    Version 0.17.1 provides a patch to fix the originally-unsound implementation of the new array reference types.

    The reference types are now all unsized. Practically speaking, this has one major implication: writing functions and traits that accept RawRef and LayoutRef will now need a + ?Sized bound to work ergonomically with ArrayRef. For example, the release notes for 0.17.0 said

    Reading / Writing Shape: LayoutRef<A, D>

    LayoutRef lets functions view or modify shape/stride information without touching data.
    This replaces verbose signatures like:

    fn alter_view<S>(a: &mut ArrayBase<S, Ix1>)
    where S: Data<Elem = f64>;

    Use AsRef / AsMut for best compatibility:

    fn alter_shape<T>(a: &mut T)
    where T: AsMut<LayoutRef<f64>>;

    However, these functions now need an additional bound to allow for callers to pass in &ArrayRef types:

    fn alter_shape<T>(a: &mut T)
    where T: AsMut<LayoutRef<f64>> + ?Sized; // Added bound here

    A huge thank you to Sarah Quiñones (@sarah-quinones) for catching the original unsound bug and helping to fix it. She does truly excellent work with faer-rs; check it out!

    Open source →
    Release notes

    Version 0.17.1 provides a patch to fix the originally-unsound implementation of the new array reference types.

    The reference types are now all unsized. Practically speaking, this has one major implication: writing functions and traits that accept RawRef and LayoutRef will now need a + ?Sized bound to work ergonomically with ArrayRef. For example, the release notes for 0.17.0 said

    Reading / Writing Shape: LayoutRef<A, D>

    LayoutRef lets functions view or modify shape/stride information without touching data. This replaces verbose signatures like:

    fn alter_view<S>(a: &mut ArrayBase<S, Ix1>)
    where S: Data<Elem = f64>;
    

    Use AsRef / AsMut for best compatibility:

    fn alter_shape<T>(a: &mut T)
    where T: AsMut<LayoutRef<f64>>;
    

    However, these functions now need an additional bound to allow for callers to pass in &ArrayRef types:

    fn alter_shape<T>(a: &mut T)
    where T: AsMut<LayoutRef<f64>> + ?Sized; // Added bound here
    

    A huge thank you to Sarah Quiñones (@sarah-quinones) for catching the original unsound bug and helping to fix it. She does truly excellent work with faer-rs; check it out!

    Open source →
  3. 0.17.0 14 Oct 2025 withdrawn
    Release notes

    Version 0.17.0 (2025-10-14) [YANKED]

    Note: 0.17.0 was yanked due to a bug in the reference type implementation that could cause use-after-free. That bug was fixed in 0.17.1. All the changes listed here are once again available in 0.17.1, with a small caveat for the reference types. See the release notes for 0.17.1 for details.

    Version 0.17.0 introduces a new array reference type — the preferred way to write functions and extension traits in ndarray. This release is fully backwards-compatible but represents a major usability improvement. The first section of this changelog explains the change in detail.

    It also includes numerous new methods, math functions, and internal improvements — all credited below.

    A New Way to Write Functions

    TL;DR

    ndarray 0.17.0 adds new reference types for writing functions and traits that work seamlessly with owned arrays and views.

    When writing functions that accept array arguments:

    • Use &ArrayRef<A, D> to read elements from any array.
    • Use &mut ArrayRef<A, D> to modify elements.
    • Use &T where T: AsRef<LayoutRef<A, D>> to inspect shape/stride only.
    • Use &mut T where T: AsMut<LayoutRef<A, D>> to modify shape/stride only.

    All existing function signatures continue to work; these new types are fully opt-in.

    Background

    ndarray has multiple ways to write functions that take arrays (a problem captured well in issue #1059). For example:

    fn sum(a: ArrayView1<f64>) -> f64;
    fn sum(a: &ArrayView1<f64>) -> f64;
    fn sum(a: &Array1<f64>) -> f64;

    All of these work, but having several equivalent forms causes confusion. The most general solution, writing generically over storage types:

    fn sum<S>(a: &ArrayBase<S, Ix1>) -> f64
    where S: Data<Elem = f64>;

    is powerful but verbose and often hard to read. Version 0.17.0 introduces a new, simpler pattern that expresses the same flexibility more clearly.

    Solution

    Three new reference types make it easier to write functions that accept any kind of array while clearly expressing what kind of access (data or layout) they need.

    Reading / Writing Elements: ArrayRef<A, D>

    ArrayRef is the Deref target of ArrayBase. It behaves like &[T] for Vec<T>, giving access to elements and layout. Mutability is expressed through the reference itself (& vs &mut), not through a trait bound or the type itself. It is used as follows:

    fn sum(a: &ArrayRef1<f64>) -> f64;
    fn cumsum_mut(a: &mut ArrayRef1<f64>);

    (ArrayRef1 is available from the prelude.)

    Reading / Writing Shape: LayoutRef<A, D>

    LayoutRef lets functions view or modify shape/stride information without touching data. This replaces verbose signatures like:

    fn alter_view<S>(a: &mut ArrayBase<S, Ix1>)
    where S: Data<Elem = f64>;

    Use AsRef / AsMut for best compatibility:

    fn alter_shape<T>(a: &mut T)
    where T: AsMut<LayoutRef<f64>>;

    (Accepting a LayoutRef directly can cause unnecessary copies; see #1440.)

    Reading / Writing Unsafe Elements: RawRef<A, D>

    RawRef augments RawArrayView and RawArrayViewMut for power users needing unsafe element access (e.g. uninitialized buffers). Like LayoutRef, it is best used via AsRef / AsMut.

    Added

    Changed

    • remove_index can now be called on views, in addition to owned arrays by @akern40

    Removed

    • Removed the serde-1, test, and docs feature flags; by @akern40 #1479
      • Use approx,serde,rayon instead of docs.
      • Use serde instead of serde-1

    Fixed

    • last_mut() now guarantees that the underlying data is uniquely held by @bluss #1429
    • ArrayView is now covariant over lifetime by @akern40 #1480, so that the following code now compiles
    fn fn_cov<'a>(x: ArrayView1<'static, f64>) -> ArrayView1<'a, f64> {
        x
    }

    Documentation

    • Filled missing documentation and adds warn(missing_docs) by @akern40
    • Fixed a typo in the documentation of select by @Drazhar
    • Fixed a typo in the documentation of into_raw_vec_and_offset by @benliepert
    • Documented Array::zeros with how to control the return type by @akern40

    Other

    Open source →
    Release notes

    Version 0.17.0 introduces a new array reference type — the preferred way to write functions and extension traits in ndarray.
    This release is fully backwards-compatible but represents a major usability improvement.
    The first section of this changelog explains the change in detail.

    It also includes numerous new methods, math functions, and internal improvements — all credited below.

    A New Way to Write Functions

    TL;DR

    ndarray 0.17.0 adds new reference types for writing functions and traits that work seamlessly with owned arrays and views.

    When writing functions that accept array arguments:

    • Use &ArrayRef<A, D> to read elements from any array.
    • Use &mut ArrayRef<A, D> to modify elements.
    • Use &T where T: AsRef<LayoutRef<A, D>> to inspect shape/stride only.
    • Use &mut T where T: AsMut<LayoutRef<A, D>> to modify shape/stride only.

    All existing function signatures continue to work; these new types are fully opt-in.

    Background

    ndarray has multiple ways to write functions that take arrays (a problem captured well in issue #1059). For example:

    fn sum(a: ArrayView1<f64>) -> f64;
    fn sum(a: &ArrayView1<f64>) -> f64;
    fn sum(a: &Array1<f64>) -> f64;
    

    All of these work, but having several equivalent forms causes confusion. The most general solution, writing generically over storage types:

    fn sum<S>(a: &ArrayBase<S, Ix1>) -> f64
    where S: Data<Elem = f64>;
    

    is powerful but verbose and often hard to read. Version 0.17.0 introduces a new, simpler pattern that expresses the same flexibility more clearly.

    Solution

    Three new reference types make it easier to write functions that accept any kind of array while clearly expressing what kind of access (data or layout) they need.

    Reading / Writing Elements: ArrayRef<A, D>

    ArrayRef is the Deref target of ArrayBase. It behaves like &[T] for Vec<T>, giving access to elements and layout. Mutability is expressed through the reference itself (& vs &mut), not through a trait bound or the type itself. It is used as follows:

    fn sum(a: &ArrayRef1<f64>) -> f64;
    fn cumsum_mut(a: &mut ArrayRef1<f64>);
    

    (ArrayRef1 is available from the prelude.)

    Reading / Writing Shape: LayoutRef<A, D>

    LayoutRef lets functions view or modify shape/stride information without touching data. This replaces verbose signatures like:

    fn alter_view<S>(a: &mut ArrayBase<S, Ix1>)
    where S: Data<Elem = f64>;
    

    Use AsRef / AsMut for best compatibility:

    fn alter_shape<T>(a: &mut T)
    where T: AsMut<LayoutRef<f64>>;
    

    (Accepting a LayoutRef directly can cause unnecessary copies; see #1440.)

    Reading / Writing Unsafe Elements: RawRef<A, D>

    RawRef augments RawArrayView and RawArrayViewMut for power users needing unsafe element access (e.g. uninitialized buffers). Like LayoutRef, it is best used via AsRef / AsMut.

    Added

    Changed

    • remove_index can now be called on views, in addition to owned arrays by @akern40

    Removed

    • Removed the serde-1, test, and docs feature flags; by @akern40 #1479
      • Use approx,serde,rayon instead of docs.
      • Use serde instead of serde-1

    Fixed

    • last_mut() now guarantees that the underlying data is uniquely held by @bluss #1429
    • ArrayView is now covariant over lifetime by @akern40 #1480, so that the following code now compiles
    fn fn_cov<'a>(x: ArrayView1<'static, f64>) -> ArrayView1<'a, f64> {
        x
    }
    

    Documentation

    • Filled missing documentation and adds warn(missing_docs) by @akern40
    • Fixed a typo in the documentation of select by @Drazhar
    • Fixed a typo in the documentation of into_raw_vec_and_offset by @benliepert
    • Documented Array::zeros with how to control the return type by @akern40

    Other

    Open source →
  4. 0.16.1 14 Aug 2024
    Release notes

    Version 0.16.1 (2024-08-14)

    • Refactor and simplify BLAS gemm call further by @bluss #1421
    • Fix infinite recursion and off-by-one error in triu/tril by @akern40 #1418
    • Fix using BLAS for all compatible cases of memory layout by @bluss #1419
    • Use PR check instead of Merge Queue, and check rustdoc by @bluss #1420
    • Make iterators covariant in element type by @bluss #1417
    Open source →
    Release notes
    • Refactor and simplify BLAS gemm call further by @bluss #1421
    • Fix infinite recursion and off-by-one error in triu/tril by @akern40 #1418
    • Fix using BLAS for all compatible cases of memory layout by @bluss #1419
    • Use PR check instead of Merge Queue, and check rustdoc by @bluss #1420
    • Make iterators covariant in element type by @bluss #1417
    Open source →
  5. 0.16.0 03 Aug 2024
    Release notes

    This release of ndarray-rand adds compatibility for the new ArrayRef type in ndarray 0.17. It adds the the new RandomRefExt trait, providing sample_axis and sample_axis_using methods on ArrayRef.

    This release also bumps the requirements for rand to 0.9.0 and for rand_distr to 0.5.0.

    Open source →
    Release notes

    Version 0.16.0 (2024-08-03)

    Featured Changes

    • Better shape: Deprecate reshape, into_shape by @bluss #1310

      .into_shape() is now deprecated.
      Use .into_shape_with_order() or .to_shape() instead, which don't have into_shape's drawbacks.

    New Features and Improvements

    Tests, CI and Maintainer tasks

    Open source →
    Release notes

    Featured Changes

    • Better shape: Deprecate reshape, into_shape by @bluss #1310<br> .into_shape() is now deprecated. Use .into_shape_with_order() or .to_shape() instead, which don't have into_shape's drawbacks.

    New Features and Improvements

    Tests, CI and Maintainer tasks

    Open source →
  6. 0.15.6 30 Jul 2022
    Release notes

    New features

    • Add get_ptr and get_mut_ptr methods for getting an element's pointer from an index, by [@adamreichold].

      https://github.com/rust-ndarray/ndarray/pull/1151

    Other changes

    • Various fixes to resolve compiler and Clippy warnings/errors, by [@aganders3] and [@jturner314].

      https://github.com/rust-ndarray/ndarray/pull/1171

    • Fix description of stack! in quick start docs, by [@jturner314]. Thanks to [@HyeokSuLee] for pointing out the issue.

      https://github.com/rust-ndarray/ndarray/pull/1156

    • Add MSRV to Cargo.toml.

      https://github.com/rust-ndarray/ndarray/pull/1191

    Open source →
  7. 0.15.5 30 Jul 2022
    Release notes

    Enhancements

    • The s! macro now works in no_std environments, by [@makotokato].

      https://github.com/rust-ndarray/ndarray/pull/1154

    Other changes

    • Improve docs and fix typos, by [@steffahn] and [@Rikorose].

      https://github.com/rust-ndarray/ndarray/pull/1134 <br> https://github.com/rust-ndarray/ndarray/pull/1164

    Open source →
  8. 0.15.4 23 Nov 2021
    Release notes

    The Dr. Turner release 🚀

    New features

    • Complex matrix multiplication now uses BLAS cgemm/zgemm when enabled (and matrix layout allows), by [@ethanhs].

      https://github.com/rust-ndarray/ndarray/pull/1106

    • Use matrixmultiply as fallback for complex matrix multiplication when BLAS is not available or the matrix layout requires it by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/1118

    • Add into/to_slice_memory_order methods for views, lifetime-preserving versions of existing similar methods by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1015

    • kron function for Kronecker product by [@ethanhs].

      https://github.com/rust-ndarray/ndarray/pull/1105

    • split_complex method for splitting complex arrays into separate real and imag view parts by [@jturner314] and [@ethanhs].

      https://github.com/rust-ndarray/ndarray/pull/1107

    • New method try_into_owned_nocopy by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1022

    • New producer and iterable axis_windows by [@VasanthakumarV] and [@jturner314].

      https://github.com/rust-ndarray/ndarray/pull/1022

    • New method Zip::par_fold by [@adamreichold]

      https://github.com/rust-ndarray/ndarray/pull/1095

    • New constructor from_diag_elem by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1076

    • Parallel::with_min_len method for parallel iterators by [@adamreichold]

      https://github.com/rust-ndarray/ndarray/pull/1081

    • Allocation-preserving map function .mapv_into_any() added by [@benkay86]

    Enhancements

    • Improve performance of .sum_axis() for some cases by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1061

    Bug fixes

    • Fix error in calling dgemv (matrix-vector multiplication) with BLAS and broadcasted arrays, by [@jturner314].

      https://github.com/rust-ndarray/ndarray/pull/1088

    API changes

    • Support approx 0.5 partially alongside the already existing approx 0.4 support. New feature flag is approx-0_5, by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1025

    • Slice and reference-to-array conversions to CowArray added for by [@jturner314].

      https://github.com/rust-ndarray/ndarray/pull/1038

    • Allow trailing comma in stack and concatenate macros by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1044

    • Zip now has a must_use marker to help users by [@adamreichold]

      https://github.com/rust-ndarray/ndarray/pull/1082

    Other changes

    • Fixing the crates.io badge on github by [@atouchet]

      https://github.com/rust-ndarray/ndarray/pull/1104

    • Use intra-doc links in docs by [@LeSeulArtichaut]

      https://github.com/rust-ndarray/ndarray/pull/1033

    • Clippy fixes by [@adamreichold]

      https://github.com/rust-ndarray/ndarray/pull/1092 <br> https://github.com/rust-ndarray/ndarray/pull/1091

    • Minor fixes in links and punctuation in docs by [@jimblandy]

      https://github.com/rust-ndarray/ndarray/pull/1056

    • Minor fixes in docs by [@chohner]

      https://github.com/rust-ndarray/ndarray/pull/1119

    • Update tests to quickcheck 1.0 by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/1114

    Open source →
  9. 0.15.3 05 Jun 2021
    Release notes

    New features

    • New methods .last/_mut() for arrays and array views by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1013

    Bug fixes

    • Fix as_slice_memory_order_mut() so that it never changes strides (the memory layout) of the array when called.

      This was a bug that impacted ArcArray (and for example not Array or ArrayView/Mut), and multiple methods on ArcArray that use as_slice_memory_order_mut (for example map_mut). Fix by [@jturner314].

      https://github.com/rust-ndarray/ndarray/pull/1019

    API changes

    • Array1 now implements From<Box<[T]>> by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1016

    • ArcArray now implements From<Array<...>> by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1021

    • CowArray now implements RawDataSubst by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1020

    Other changes

    • Mention unsharing in .as_mut_ptr docs by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/1017

    • Clarify and fix minor errors in push/append method docs by [@bluss] f21c668a

    • Fix several warnings in doc example code by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/1009

    Open source →
  10. 0.15.2 17 May 2021
    Release notes

    New features

    • New methods for growing/appending to owned Arrays. These methods allow building an array efficiently chunk by chunk. By [@bluss].

      • .push_row(), .push_column()
      • .push(axis, array), .append(axis, array)

      stack, concatenate and .select() now support all Clone-able elements as a result.

      https://github.com/rust-ndarray/ndarray/pull/932 <br> https://github.com/rust-ndarray/ndarray/pull/990

    • New reshaping method .to_shape(...), called with new shape and optional ordering parameter, this is the first improvement for reshaping in terms of added features and increased consistency, with more to come. By [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/982

    • Array now implements a by-value iterator, by [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/986

    • New methods .move_into() and .move_into_uninit() which allow assigning into an array by moving values from an array into another, by [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/932 <br> https://github.com/rust-ndarray/ndarray/pull/997

    • New method .remove_index() for owned arrays by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/967

    • New constructor build_uninit which makes it easier to initialize uninitialized arrays in a way that's generic over all owned array kinds. By [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/1001

    Enhancements

    • Preserve the allocation of the input array in some more cases for arithmetic ops by [@SparrowLii]

      https://github.com/rust-ndarray/ndarray/pull/963

    • Improve broadcasting performance for &array + &array arithmetic ops by [@SparrowLii]

      https://github.com/rust-ndarray/ndarray/pull/965

    Bug fixes

    • Fix an error in construction of empty array with negative strides, by [@jturner314].

      https://github.com/rust-ndarray/ndarray/pull/998

    • Fix minor performance bug with loop order selection in Zip by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/977

    API changes

    • Add dimension getters to Shape and StrideShape by [@stokhos]

      https://github.com/rust-ndarray/ndarray/pull/978

    Other changes

    • Rustdoc now uses the ndarray logo that [@jturner314] created previously

      https://github.com/rust-ndarray/ndarray/pull/981

    • Minor doc changes by [@stokhos], [@cassiersg] and [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/968 <br> https://github.com/rust-ndarray/ndarray/pull/971 <br> https://github.com/rust-ndarray/ndarray/pull/974

    • A little refactoring to reduce generics bloat in a few places by [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/1004

    Open source →
  11. 0.15.1 29 Mar 2021
    Release notes

    Enhancements

    • Arrays and views now have additional PartialEq impls so that it's possible to compare arrays with references to arrays and vice versa by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/958

    Bug fixes

    • Fix panic in creation of .windows() producer from negative stride array by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/957

    Other changes

    • Update BLAS documentation further by @bluss

      https://github.com/rust-ndarray/ndarray/pull/955 <br> https://github.com/rust-ndarray/ndarray/pull/959

    Open source →
  12. 0.15.0 25 Mar 2021
    Release notes

    New features

    • Support inserting new axes while slicing by [@jturner314]. This is an example:

      let view = arr.slice(s![.., -1, 2..;-1, NewAxis]);
      

      https://github.com/rust-ndarray/ndarray/pull/570

    • Support two-sided broadcasting in arithmetic operations with arrays by [@SparrowLii]

      This now allows, for example, addition of a 3 x 1 with a 1 x 3 array; the operands are in this case broadcast to 3 x 3 which is the shape of the result.

      Note that this means that a new trait bound is required in some places when mixing dimensionality types of arrays in arithmetic operations.

      https://github.com/rust-ndarray/ndarray/pull/898

    • Support for compiling ndarray as no_std (using core and alloc) by [@xd009642] and [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/861 <br> https://github.com/rust-ndarray/ndarray/pull/889

    • New methods .cell_view() and ArrayViewMut::into_cell_view that enable new ways of working with array elements as if they were in Cells - setting elements through shared views and broadcast views, by [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/877

    • New methods slice_each_axis/_mut/_inplace that make it easier to slice a dynamic number of axes in some situations, by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/913

    • New method a.assign_to(b) with the inverse argument order compared to the existing b.assign(a) and some extra features like assigning into uninitialized arrays, By [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/947

    • New methods .std() and .var() for standard deviation and variance by [@kdubovikov]

      https://github.com/rust-ndarray/ndarray/pull/790

    Enhancements

    • Ndarray can now correctly determine that arrays can be contiguous, even if they have negative strides, by [@SparrowLii]

      https://github.com/rust-ndarray/ndarray/pull/885 <br> https://github.com/rust-ndarray/ndarray/pull/948

    • Improvements to map_inplace by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/911

    • .into_dimensionality performance was improved for the IxDyn to IxDyn case by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/906

    • Improved performance for scalar + &array and &array + scalar operations by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/890

    API changes

    • New constructors Array::from_iter and Array::from_vec by [@bluss]. No new functionality, just that these constructors are available without trait imports.

      https://github.com/rust-ndarray/ndarray/pull/921

    • NdProducer::raw_dim is now a documented method by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/918

    • AxisDescription is now a struct with field names, not a tuple struct by [@jturner314]. Its accessor methods are now deprecated.

      https://github.com/rust-ndarray/ndarray/pull/915

    • Methods for array comparison abs_diff_eq and relative_eq are now exposed as inherent methods too (no trait import needed), still under the approx feature flag by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/946

    • Changes to the slicing-related types and macro by [@jturner314] and [@bluss]:

      • Remove the Dimension::SliceArg associated type, and add a new SliceArg trait for this purpose.
      • Change the return type of the s![] macro to an owned SliceInfo rather than a reference.
      • Replace the SliceOrIndex enum with SliceInfoElem, which has an additional NewAxis variant and does not have a step_by method.
      • Change the type parameters of SliceInfo in order to support the NewAxis functionality and remove some tricky unsafe code.
      • Mark the SliceInfo::new method as unsafe. The new implementations of TryFrom can be used as a safe alternative.
      • Remove the AsRef<SliceInfo<[SliceOrIndex], D>> for SliceInfo<T, D> implementation. Add the similar From<&'a SliceInfo<T, Din, Dout>> for SliceInfo<&'a [SliceInfoElem], Din, Dout> conversion as an alternative.
      • Change the expr ; step case in the s![] macro to error at compile time if an unsupported type for expr is used, instead of panicking at runtime.

      https://github.com/rust-ndarray/ndarray/pull/570 <br> https://github.com/rust-ndarray/ndarray/pull/940 <br> https://github.com/rust-ndarray/ndarray/pull/943 <br> https://github.com/rust-ndarray/ndarray/pull/945 <br>

    • Removed already deprecated methods by [@bluss]:

      • Remove deprecated .all_close() - use approx feature and methods like .abs_diff_eq instead
      • Mark .scalar_sum() as deprecated - use .sum() instead
      • Remove deprecated DataClone - use Data + RawDataClone instead
      • Remove deprecated ArrayView::into_slice - use to_slice() instead.

      https://github.com/rust-ndarray/ndarray/pull/874

    • Remove already deprecated methods: rows, cols (for row and column count; the new names are nrows and ncols) by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/872

    • Renamed Zip methods by [@bluss] and [@SparrowLii]:

      • apply -> for_each
      • apply_collect -> map_collect
      • apply_collect_into -> map_collect_into
      • (par_ prefixed methods renamed accordingly)

      https://github.com/rust-ndarray/ndarray/pull/894 <br> https://github.com/rust-ndarray/ndarray/pull/904 <br>

    • Deprecate Array::uninitialized and revamped its replacement by [@bluss]

      Please use new new Array::uninit which is based on MaybeUninit (renamed from Array::maybe_uninit, the old name is also deprecated).

      https://github.com/rust-ndarray/ndarray/pull/902 <br> https://github.com/rust-ndarray/ndarray/pull/876

    • Renamed methods (old names are now deprecated) by [@bluss] and [@jturner314]

      • genrows/_mut -> rows/_mut
      • gencolumns/_mut -> columns/_mut
      • stack_new_axis -> stack (the new name already existed)
      • visit -> for_each

      https://github.com/rust-ndarray/ndarray/pull/872 <br> https://github.com/rust-ndarray/ndarray/pull/937 <br> https://github.com/rust-ndarray/ndarray/pull/907 <br>

    • Updated matrixmultiply dependency to 0.3.0 by [@bluss] and adding new feature flag matrixmultiply-threading to enable its threading

      https://github.com/rust-ndarray/ndarray/pull/888 <br> https://github.com/rust-ndarray/ndarray/pull/938 <br>

    • Updated num-complex dependency to 0.4.0 by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/952

    Bug fixes

    • Fix Zip::indexed for the 0-dimensional case by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/862

    • Fix bug in layout computation that broke parallel collect to f-order array in some circumstances by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/900

    • Fix an unwanted panic in shape overflow checking by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/855

    • Mark the SliceInfo::new method as unsafe due to the requirement that indices.as_ref() always return the same value when called multiple times, by [@bluss] and [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/570

    Other changes

    • It was changed how we integrate with BLAS and blas-src. Users of BLAS need to read the README for the updated instructions. Ndarray itself no longer has public dependency on blas-src. Changes by [@bluss].

      https://github.com/rust-ndarray/ndarray/pull/891 <br> https://github.com/rust-ndarray/ndarray/pull/951

    • Various improvements to tests and CI by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/934 <br> https://github.com/rust-ndarray/ndarray/pull/924 <br>

    • The sort-axis.rs example file's implementation of sort was bugfixed and now has tests, by [@dam5h] and [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/916 <br> https://github.com/rust-ndarray/ndarray/pull/930

    • We now link to the #rust-sci room on matrix in the readme by [@jturner314]

      https://github.com/rust-ndarray/ndarray/pull/619

    • Internal cleanup with builder-like methods for creating arrays by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/908

    • Implementation fix of .swap(i, j) by [@bluss]

      https://github.com/rust-ndarray/ndarray/pull/903

    • Minimum supported Rust version (MSRV) is Rust 1.49.

      https://github.com/rust-ndarray/ndarray/pull/902

    • Minor improvements to docs by [@insideoutclub]

      https://github.com/rust-ndarray/ndarray/pull/887

    Open source →
  13. 0.14.0 28 Nov 2020
    Release notes

    New features

    • Zip::apply_collect and Zip::par_apply_collect now support all elements (not just Copy elements) by [@bluss] https://github.com/rust-ndarray/ndarray/pull/814
      https://github.com/rust-ndarray/ndarray/pull/817

    • New function stack by [@andrei-papou]
      https://github.com/rust-ndarray/ndarray/pull/844
      https://github.com/rust-ndarray/ndarray/pull/850

    Enhancements

    • Handle inhomogeneous shape inputs better in Zip, in practice: guess better whether to prefer c- or f-order for the inner loop by [@bluss] https://github.com/rust-ndarray/ndarray/pull/809

    • Improve code sharing in some commonly used code by [@bluss] https://github.com/rust-ndarray/ndarray/pull/819

    API changes

    • The old function stack has been renamed to concatenate. A new function stack with numpy-like semantics have taken its place. Old usages of stack should change to use concatenate.

      concatenate produces an array with the same number of axes as the inputs.
      stack produces an array that has one more axis than the inputs.

      This change was unfortunately done without a deprecation period, due to the long period between releases.

      https://github.com/rust-ndarray/ndarray/pull/844
      https://github.com/rust-ndarray/ndarray/pull/850

    • Enum ErrorKind is now properly non-exhaustive and has lost its old placeholder invalid variant. By [@Zuse64] https://github.com/rust-ndarray/ndarray/pull/848

    • Remove deprecated items:

      • RcArray (deprecated alias for ArcArray)
      • Removed subview_inplace use collapse_axis
      • Removed subview_mut use index_axis_mut
      • Removed into_subview use index_axis_move
      • Removed subview use index_axis
      • Removed slice_inplace use slice_collapse
    • Undeprecated remove_axis because its replacement is hard to find out on your own.

    • Update public external dependencies to new versions by [@Eijebong] and [@bluss]

      • num-complex 0.3
      • approx 0.4 (optional)
      • blas-src 0.6.1 and openblas-src 0.9.0 (optional)

      https://github.com/rust-ndarray/ndarray/pull/810
      https://github.com/rust-ndarray/ndarray/pull/851

    Other changes

    • Minor doc fixes by [@acj] https://github.com/rust-ndarray/ndarray/pull/834

    • Minor doc fixes by [@xd009642] https://github.com/rust-ndarray/ndarray/pull/847

    • The minimum required rust version is Rust 1.42.

    • Release management by [@bluss]

    Open source →
  14. 0.13.1 21 Apr 2020
    Release notes

    New features

    • New amazing slicing methods multi_slice_* by [@jturner314] https://github.com/rust-ndarray/ndarray/pull/717
    • New method .cast() for raw views by [@bluss] https://github.com/rust-ndarray/ndarray/pull/734
    • New aliases ArcArray1, ArcArray2 by [@d-dorazio] https://github.com/rust-ndarray/ndarray/pull/741
    • New array constructor from_shape_simple_fn by [@bluss] https://github.com/rust-ndarray/ndarray/pull/728
    • Dimension::Larger now requires RemoveAxis by [@TheLortex] https://github.com/rust-ndarray/ndarray/pull/792
    • New methods for collecting Zip into an array by [@bluss] https://github.com/rust-ndarray/ndarray/pull/797
    • New Array::maybe_uninit and .assume_init() by [@bluss] https://github.com/rust-ndarray/ndarray/pull/803

    Enhancements

    • Remove itertools as dependency by [@bluss] https://github.com/rust-ndarray/ndarray/pull/730
    • Improve zip_mut_with (and thus arithmetic ops) for f-order arrays by [@nilgoyette] https://github.com/rust-ndarray/ndarray/pull/754
    • Implement fold for IndicesIter by [@jturner314] https://github.com/rust-ndarray/ndarray/pull/733
    • New Quick Start readme by [@lifuyang] https://github.com/rust-ndarray/ndarray/pull/785

    API changes

    • Remove alignment restriction on raw views by [@jturner314] https://github.com/rust-ndarray/ndarray/pull/738

    Other changes

    • Fix documentation in ndarray for numpy users by [@jturner314]
    • Improve blas version documentation by [@jturner314]
    • Doc improvements by [@mockersf] https://github.com/rust-ndarray/ndarray/pull/751
    • Doc and lint related improvements by [@viniciusd] https://github.com/rust-ndarray/ndarray/pull/750
    • Minor fixes related to best practices for unsafe code by [@bluss] https://github.com/rust-ndarray/ndarray/pull/799 https://github.com/rust-ndarray/ndarray/pull/802
    • Release management by [@bluss]
    Open source →
  15. 0.13.0 23 Sep 2019
    Release notes

    New features

    • ndarray-parallel is merged into ndarray. Use the rayon feature-flag to get access to parallel iterators and other parallelized methods. (#563 by [@bluss])
    • Add logspace and geomspace constructors (#617 by [@JP-Ellis])
    • Implement approx traits for ArrayBase. They can be enabled using the approx feature-flag. (#581 by [@jturner314])
    • Add mean method (#580 by [@LukeMathWalker])
    • Add Zip::all to check if all elements satisfy a predicate (#615 by [@mneumann])
    • Add RawArrayView and RawArrayViewMut types and RawData, RawDataMut, and RawDataClone traits (#496 by [@jturner314])
    • Add CowArray, Clone on write array (#632 by [@jturner314] and [@andrei-papou])
    • Add as_standard_layout to ArrayBase: it takes an array by reference and returns a CoWArray in standard layout (#616 by [@jturner314] and [@andrei-papou])
    • Add Array2::from_diag method to create 2D arrays from a diagonal (#673 by [@rth])
    • Add fold method to Zip (#684 by [@jturner314])
    • Add split_at method to AxisChunksIter/Mut (#691 by [@jturner314])
    • Implement parallel iteration for AxisChunksIter/Mut (#639 by [@nitsky])
    • Add into_scalar method to ArrayView0 and ArrayViewMut0 (#700 by [@LukeMathWalker])
    • Add accumulate_axis_inplace method to ArrayBase (#611 by [@jturner314] and [@bluss])
    • Add the array!, azip!, and s! macros to ndarray::prelude (#517 by [@jturner314])

    Enhancements

    • Improve performance for matrix multiplications when using the pure-Rust backend thanks to matrix-multiply:v0.2 (leverage SIMD instructions on x86-64 with runtime feature detection) (#556 by [@bluss])
    • Improve performance of fold for iterators (#574 by [@jturner314])
    • Improve performance of nth_back for iterators (#686 by [@jturner314])
    • Improve performance of iterators for 1-d arrays (#614 by [@andrei-papou])
    • Improve formatting for large arrays (#606 by [@andrei-papou] and [@LukeMathWalker], #633 and #707 by [@jturner314], and #713 by [@bluss])
    • Arithmetic operations between arrays with different element types are now allowed when there is a scalar equivalent (#588 by [@jturner314])
    • .map_axis/_mut won't panic on 0-length axis (#579 by [@andrei-papou])
    • Various documentation improvements (by [@jturner314], [@JP-Ellis], [@LukeMathWalker], [@bluss])

    API changes

    • The into_slice method on ArrayView is deprecated and renamed to to_slice (#646 by [@max-sixty])
    • RcArray is deprecated in favour of ArcArray (#560 by [@bluss])
    • into_slice is renamed to to_slice. into_slice is now deprecated (#646 by [@max-sixty])
    • from_vec is deprecated in favour of using the From to convert a Vec into an Array (#648 by [@max-sixty])
    • mean_axis returns Option<A> instead of A, to avoid panicking when invoked on a 0-length axis (#580 by [@LukeMathWalker])
    • Remove rustc-serialize feature-flag. serde is the recommended feature-flag for serialization (#557 by [@bluss])
    • rows/cols are renamed to nrows/ncols. rows/cols are now deprecated (#701 by [@bluss])
    • The usage of the azip! macro has changed to be more similar to for loops (#626 by [@jturner314])
    • For var_axis and std_axis, the constraints on ddof and the trait bounds on A have been made more strict (#515 by [@jturner314])
    • For mean_axis, the constraints on A have changed (#518 by [@jturner314])
    • DataClone is deprecated in favor of using Data + RawDataClone (#496 by [@jturner314])
    • The Dimension::Pattern associated type now has more trait bounds (#634 by [@termoshtt])
    • Axis::index() now takes self instead of &self (#642 by [@max-sixty])
    • The bounds on the implementation of Hash for Dim have changed (#642 by [@max-sixty])

    Bug fixes

    • Prevent overflow when computing strides in do_slice (#575 by [@jturner314])
    • Fix issue with BLAS matrix-vector multiplication for array with only 1 non-trivial dimension (#585 by [@sebasv])
    • Fix offset computation to avoid UB/panic when slicing in some edge cases (#636 by [@jturner314])
    • Fix issues with axis iterators (#669 by [@jturner314])
    • Fix handling of empty input to s! macro (#714 by [@bluss] and #715 by [@jturner314])

    Other changes

    • Various improvements to ndarray's CI pipeline (clippy, cargo fmt, etc. by [@max-sixty] and [@termoshtt])
    • Bump minimum required Rust version to 1.37.
    Open source →
  16. 0.12.1 21 Nov 2018
    Release notes
    • Add std_axis method for computing standard deviation by @LukeMathWalker.
      • Add product method for computing product of elements in an array by @sebasv.
      • Add first and first_mut methods for getting the first element of an array.
      • Add into_scalar method for converting an Array0 into its element.
      • Add insert_axis_inplace and index_axis_inplace methods for inserting and removing axes in dynamic-dimensional (IxDyn) arrays without taking ownership.
      • Add stride_of method for getting the stride of an axis.
      • Add public ndim and zeros methods to Dimension trait.
      • Rename scalar_sum to sum, subview to index_axis, subview_mut to index_axis_mut, subview_inplace to collapse_axis, into_subview to index_axis_move, and slice_inplace to slice_collapse (deprecating the old names, except for scalar_sum which will be in 0.13).
      • Deprecate remove_axis and fix soundness hole when removing a zero-length axis.
      • Implement Clone for LanesIter.
      • Implement Debug, Copy, and Clone for FoldWhile.
      • Relax constraints on sum_axis, mean_axis, and into_owned.
      • Add number of dimensions (and whether it's const or dynamic) to array Debug format.
      • Allow merging axes with merge_axes when either axis length is ≤ 1.
      • Clarify and check more precise safety requirements for constructing arrays. This fixes undefined behavior in some edge cases. (See #543.)
      • Fix is_standard_layout in some edge cases. (See #543.)
      • Fix chunk sizes in axis_chunks_iter and axis_chunks_iter_mut when the stride is zero or the array element type is zero-sized by @bluss.
      • Improve documentation by @jturner314, @bluss, and @paulkernfeld.
      • Improve element iterators with implementations of Iterator::rfold.
      • Miscellaneous internal implementation improvements by @jturner314 and @bluss.
    Open source →
  17. 0.12.0 01 Sep 2018
    Release notes
    • Add var_axis method for computing variance by @LukeMathWalker.
      • Add map_mut and map_axis_mut methods (mutable variants of map and map_axis) by @LukeMathWalker.
      • Add support for 128-bit integer scalars (i128 and u128).
      • Add support for slicing with inclusive ranges (start..=end and ..=end).
      • Relax constraint on closure from Fn to FnMut for mapv, mapv_into, map_inplace and mapv_inplace.
      • Implement TrustedIterator for IterMut.
      • Bump num-traits and num-complex to version 0.2.
      • Bump blas-src to version 0.2.
      • Bump minimum required Rust version to 1.27.
      • Additional contributors to this release: @ExpHP, @jturner314, @alexbool, @messense, @danmack, @nbro
    Open source →
  18. 0.11.2 21 Mar 2018
    Release notes
    • New documentation; @jturner314 has written a large “ndarray for NumPy users” document, which we include in rustdoc. Read it here a useful quick guide for any user, and in particular if you are familiar with numpy.
      • Add ArcArray. RcArray has become ArcArray; it is now using thread safe reference counting just like Arc; this means that shared ownership arrays are now Send/Sync if the corresponding element type is `Send
        • Sync`.
      • Add array method .permute_axes() by @jturner314
      • Add array constructor Array::ones by @ehsanmok
      • Add the method .reborrow() to ArrayView/Mut, which can be used to shorten the lifetime of an array view; in a reference-like type this normally happens implicitly but for technical reasons the views have an invariant lifetime parameter.
      • Fix an issue with type inference, the dimensionality of an array should not infer correctly in more cases when using slicing. By @jturner314.
    Open source →
  19. 0.11.1 21 Jan 2018
    Release notes
    • Dimension types (Ix1, Ix2, .., IxDyn) now implement Hash by @jturner314
      • Blas integration can now use gemv for matrix-vector multiplication also when the matrix is f-order by @maciejkula
      • Encapsulated unsafe code blocks in the s![] macro are now exempted from the unsafe_code lint by @jturner314
    Open source →
  20. 0.11.0 29 Dec 2017
    Release notes

    Release announcement

    • Allow combined slicing and subviews in a single operation by @jturner314 and @bluss

      • Add support for individual indices (to indicate subviews) to the s![] macro, and change the return type to &SliceInfo<[SliceOrIndex; n], Do>.
      • Change the argument type of the slicing methods to correspond to the new s![] macro.
      • Replace the Si type with SliceOrIndex.
      • Add a new Slice type that is similar to the old Si type.
    • Add support for more index types (e.g. usize) to the s![] macro by @jturner314

    • Rename .islice() to .slice_inplace() by @jturner314

    • Rename .isubview() to .subview_inplace() by @jturner314

    • Add .slice_move(), .slice_axis(), .slice_axis_mut(), and .slice_axis_inplace() methods by @jturner314

    • Add Dimension::NDIM associated constant by @jturner314

    • Change trait bounds for arithmetic ops between an array (by value) and a reference to an array or array view (“array1 (op) &array2”); before, an ArrayViewMut was supported on the left hand side, now, the left hand side must not be a view. (#380) by @jturner314

    • Remove deprecated methods (.whole_chunks(), .whole_chunks_mut(), .sum(), and .mean(); replaced by .exact_chunks(), .exact_chunks_mut(), .sum_axis(), and .mean_axis(), respectively) by @bluss

    • Updated to the latest blas (optional) dependencies. See instructions in the README.

    • Minimum required Rust version is 1.22.

    Open source →
  21. 0.10.14 28 Dec 2017

    Nothing published for this version

  22. 0.10.13 16 Nov 2017

    Nothing published for this version

  23. 0.10.12 18 Oct 2017

    Nothing published for this version

  24. 0.10.11 11 Oct 2017

    Nothing published for this version

  25. 0.10.10 01 Oct 2017

    Nothing published for this version

  26. 0.10.9 28 Sep 2017

    Nothing published for this version

  27. 0.10.8 23 Sep 2017

    Nothing published for this version

  28. 0.10.7 21 Sep 2017

    Nothing published for this version

  29. 0.10.6 09 Sep 2017

    Nothing published for this version

  30. 0.10.5 27 Aug 2017

    Nothing published for this version

  31. 0.10.4 19 Aug 2017

    Nothing published for this version

  32. 0.10.3 13 Aug 2017

    Nothing published for this version

  33. 0.10.2 13 Aug 2017

    Nothing published for this version

  34. 0.10.1 06 Aug 2017

    Nothing published for this version

  35. 0.10.0 17 Jul 2017

    Nothing published for this version

  36. 0.9.1 13 Apr 2017

    Nothing published for this version

  37. 0.9.0 09 Apr 2017

    Nothing published for this version

  38. 0.9.0-alpha.1 06 Apr 2017 pre-release

    Nothing published for this version

  39. 0.8.4 04 Apr 2017

    Nothing published for this version

  40. 0.8.3 02 Apr 2017

    Nothing published for this version

  41. 0.8.2 31 Mar 2017

    Nothing published for this version

  42. 0.8.1 28 Mar 2017

    Nothing published for this version

  43. 0.8.0 02 Mar 2017

    Nothing published for this version

  44. 0.7.3 29 Jan 2017

    Nothing published for this version

  45. 0.7.2 24 Dec 2016

    Nothing published for this version

  46. 0.7.1 25 Nov 2016

    Nothing published for this version

  47. 0.7.0 21 Nov 2016

    Nothing published for this version

  48. 0.7.0-alpha.1 19 Nov 2016 pre-release

    Nothing published for this version

  49. 0.7.0-alpha.0 18 Nov 2016 pre-release

    Nothing published for this version

  50. 0.6.10 25 Nov 2016

    Nothing published for this version

  51. 0.6.9 11 Nov 2016

    Nothing published for this version

  52. 0.6.8 23 Oct 2016

    Nothing published for this version

  53. 0.6.7 21 Oct 2016

    Nothing published for this version

  54. 0.6.6 20 Oct 2016

    Nothing published for this version

  55. 0.6.5 26 Sep 2016

    Nothing published for this version

  56. 0.6.4 22 Sep 2016

    Nothing published for this version

  57. 0.6.3 15 Sep 2016

    Nothing published for this version

  58. 0.6.2 14 Aug 2016

    Nothing published for this version

  59. 0.6.1 04 Aug 2016

    Nothing published for this version

  60. 0.6.0 06 Jun 2016

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive