Struct ndarray::ArrayBase [] [src]

pub struct ArrayBase<S, D> where S: Data { /* fields omitted */ }

An N-dimensional array.

The array is a general container of elements. It cannot grow or shrink, but can be sliced into subsets of its data. The array supports arithmetic operations by applying them elementwise.

The ArrayBase<S, D> is parameterized by S for the data container and D for the dimensionality.

Type aliases Array, RcArray, ArrayView, and ArrayViewMut refer to ArrayBase with different types for the data container.

Contents

Array

Array is an owned array that ows the underlying array elements directly (just like a Vec) and it is the default way to create and store n-dimensional data. Array<A, D> has two type parameters: A for the element type, and D for the dimensionality. A particular dimensionality's type alias like Array3<A> just has the type parameter A for element type.

An example:

// Create a three-dimensional f64 array, initialized with zeros
use ndarray::Array3;
let mut temperature = Array3::<f64>::zeros((3, 4, 5));
// Increase the temperature in this location
temperature[[2, 2, 2]] += 0.5;

RcArray

RcArray is an owned array with reference counted data (shared ownership). Sharing requires that it uses copy-on-write for mutable operations. Calling a method for mutating elements on RcArray, for example view_mut() or get_mut(), will break sharing and require a clone of the data (if it is not uniquely held).

Array Views

ArrayView and ArrayViewMut are read-only and read-write array views respectively. They use dimensionality, indexing, and almost all other methods the same was as the other array types.

A view is created from an array using .view(), .view_mut(), using slicing (.slice(), .slice_mut()) or from one of the many iterators that yield array views.

You can also create an array view from a regular slice of data not allocated with Array — see Methods Specific to Array Views.

Note that all ArrayBase variants can change their view (slicing) of the data freely, even when their data can’t be mutated.

Indexing and Dimension

The dimensionality of the array determines the number of axes, for example a 2D array has two axes. These are listed in “big endian” order, so that the greatest dimension is listed first, the lowest dimension with the most rapidly varying index is the last.

In a 2D array the index of each element is [row, column] as seen in this 4 × 3 example:

[[ [0, 0], [0, 1], [0, 2] ],  // row 0
 [ [1, 0], [1, 1], [1, 2] ],  // row 1
 [ [2, 0], [2, 1], [2, 2] ],  // row 2
 [ [3, 0], [3, 1], [3, 2] ]]  // row 3
//    \       \       \
//   column 0  \     column 2
//            column 1

The number of axes for an array is fixed by its D type parameter: Ix1 for a 1D array, Ix2 for a 2D array etc. The dimension type IxDyn allows a dynamic number of axes.

A fixed size array ([usize; N]) of the corresponding dimensionality is used to index the Array, making the syntax array[[ i, j, ...]]

use ndarray::Array2;
let mut array = Array2::zeros((4, 3));
array[[1, 1]] = 7;

Important traits and types for dimension and indexing:

The default memory order of an array is row major order (a.k.a “c” order), where each row is contiguous in memory. A column major (a.k.a. “f” or fortran) memory order array has columns (or, in general, the outermost axis) with contiguous elements.

The logical order of any array’s elements is the row major order (the rightmost index is varying the fastest). The iterators .iter(), .iter_mut() always adhere to this order, for example.

Slicing

You can use slicing to create a view of a subset of the data in the array. Slicing methods include .slice(), .islice(), .slice_mut().

The slicing argument can be passed using the macro s![], which will be used in all examples. (The explicit form is a reference to a fixed size array of Si; see its docs for more information.)

// import the s![] macro
#[macro_use(s)]
extern crate ndarray;

use ndarray::arr3;

fn main() {

// 2 submatrices of 2 rows with 3 elements per row, means a shape of `[2, 2, 3]`.

let a = arr3(&[[[ 1,  2,  3],     // -- 2 rows  \_
                [ 4,  5,  6]],    // --         /
               [[ 7,  8,  9],     //            \_ 2 submatrices
                [10, 11, 12]]]);  //            /
//  3 columns ..../.../.../

assert_eq!(a.shape(), &[2, 2, 3]);

// Let’s create a slice with
//
// - Both of the submatrices of the greatest dimension: `..`
// - Only the first row in each submatrix: `0..1`
// - Every element in each row: `..`

let b = a.slice(s![.., 0..1, ..]);
// without the macro, the explicit argument is `&[S, Si(0, Some(1), 1), S]`

let c = arr3(&[[[ 1,  2,  3]],
               [[ 7,  8,  9]]]);
assert_eq!(b, c);
assert_eq!(b.shape(), &[2, 1, 3]);

// Let’s create a slice with
//
// - Both submatrices of the greatest dimension: `..`
// - The last row in each submatrix: `-1..`
// - Row elements in reverse order: `..;-1`
let d = a.slice(s![.., -1.., ..;-1]);
let e = arr3(&[[[ 6,  5,  4]],
               [[12, 11, 10]]]);
assert_eq!(d, e);
}

Subviews

Subview methods allow you to restrict the array view while removing one axis from the array. Subview methods include .subview(), .isubview(), .subview_mut().

Subview takes two arguments: axis and index.

use ndarray::{arr3, aview2, Axis};

// 2 submatrices of 2 rows with 3 elements per row, means a shape of `[2, 2, 3]`.

let a = arr3(&[[[ 1,  2,  3],    // \ axis 0, submatrix 0
                [ 4,  5,  6]],   // /
               [[ 7,  8,  9],    // \ axis 0, submatrix 1
                [10, 11, 12]]]); // /
        //        \
        //         axis 2, column 0

assert_eq!(a.shape(), &[2, 2, 3]);

// Let’s take a subview along the greatest dimension (axis 0),
// taking submatrix 0, then submatrix 1

let sub_0 = a.subview(Axis(0), 0);
let sub_1 = a.subview(Axis(0), 1);

assert_eq!(sub_0, aview2(&[[ 1,  2,  3],
                           [ 4,  5,  6]]));
assert_eq!(sub_1, aview2(&[[ 7,  8,  9],
                           [10, 11, 12]]));
assert_eq!(sub_0.shape(), &[2, 3]);

// This is the subview picking only axis 2, column 0
let sub_col = a.subview(Axis(2), 0);

assert_eq!(sub_col, aview2(&[[ 1,  4],
                             [ 7, 10]]));

.isubview() modifies the view in the same way as subview(), but since it is in place, it cannot remove the collapsed axis. It becomes an axis of length 1.

.outer_iter() is an iterator of every subview along the zeroth (outer) axis, while .axis_iter() is an iterator of every subview along a specific axis.

Arithmetic Operations

Arrays support all arithmetic operations the same way: they apply elementwise.

Since the trait implementations are hard to overview, here is a summary.

Let A be an array or view of any kind. Let B be an array with owned storage (either Array or RcArray). Let C be an array with mutable data (either Array, RcArray or ArrayViewMut). The following combinations of operands are supported for an arbitrary binary operator denoted by @ (it can be +, -, *, / and so on).

The trait ScalarOperand marks types that can be used in arithmetic with arrays directly. For a scalar K the following combinations of operands are supported (scalar can be on either the left or right side, but ScalarOperand docs has the detailed condtions).

Broadcasting

Arrays support limited broadcasting, where arithmetic operations with array operands of different sizes can be carried out by repeating the elements of the smaller dimension array. See .broadcast() for a more detailed description.

use ndarray::arr2;

let a = arr2(&[[1., 1.],
               [1., 2.],
               [0., 3.],
               [0., 4.]]);

let b = arr2(&[[0., 1.]]);

let c = arr2(&[[1., 2.],
               [1., 3.],
               [0., 4.],
               [0., 5.]]);
// We can add because the shapes are compatible even if not equal.
// The `b` array is shape 1 × 2 but acts like a 4 × 2 array.
assert!(
    c == a + b
);

Methods

impl<S, A> ArrayBase<S, Ix1> where S: DataOwned<Elem = A>
[src]

Constructor Methods for Owned Arrays

Constructor methods for one-dimensional arrays.

Note that the constructor methods apply to Array and RcArray, the two array types that have owned storage.

Create a one-dimensional array from a vector (no copying needed).

use ndarray::Array;

let array = Array::from_vec(vec![1., 2., 3., 4.]);

Create a one-dimensional array from an iterable.

use ndarray::{Array, arr1};

let array = Array::from_iter((0..5).map(|x| x * x));
assert!(array == arr1(&[0, 1, 4, 9, 16]))

Create a one-dimensional array from the inclusive interval [start, end] with n elements. A must be a floating point type.

use ndarray::{Array, arr1};

let array = Array::linspace(0., 1., 5);
assert!(array == arr1(&[0.0, 0.25, 0.5, 0.75, 1.0]))

Create a one-dimensional array from the half-open interval [start, end) with elements spaced by step. A must be a floating point type.

use ndarray::{Array, arr1};

let array = Array::range(0., 5., 1.);
assert!(array == arr1(&[0., 1., 2., 3., 4.]))

impl<S, A> ArrayBase<S, Ix2> where S: DataOwned<Elem = A>
[src]

Constructor methods for two-dimensional arrays.

Create an identity matrix of size n (square 2D array).

Panics if n * n would overflow usize.

impl<S, A, D> ArrayBase<S, D> where S: DataOwned<Elem = A>, D: Dimension
[src]

Constructor methods for n-dimensional arrays.

Create an array with copies of elem, shape shape.

Panics if the number of elements in shape would overflow usize.

use ndarray::{Array, arr3, ShapeBuilder};

let a = Array::from_elem((2, 2, 2), 1.);

assert!(
    a == arr3(&[[[1., 1.],
                 [1., 1.]],
                [[1., 1.],
                 [1., 1.]]])
);
assert!(a.strides() == &[4, 2, 1]);

let b = Array::from_elem((2, 2, 2).f(), 1.);
assert!(b.strides() == &[1, 2, 4]);

Create an array with zeros, shape shape.

Panics if the number of elements in shape would overflow usize.

Create an array with default values, shape shape

Panics if the number of elements in shape would overflow usize.

Create an array with values created by the function f.

The elements are visited in arbitirary order.

Panics if the number of elements in shape would overflow usize.

Create an array with the given shape from a vector. (No cloning of elements needed.)


For a contiguous c- or f-order shape, the following applies:

Errors if shape does not correspond to the number of elements in v.


For custom strides, the following applies:

Errors if strides and dimensions can point out of bounds of v.
Errors if strides allow multiple indices to point to the same element.

use ndarray::Array;
use ndarray::ShapeBuilder; // Needed for .strides() method
use ndarray::arr2;

let a = Array::from_shape_vec((2, 2), vec![1., 2., 3., 4.]);
assert!(a.is_ok());

let b = Array::from_shape_vec((2, 2).strides((1, 2)),
                              vec![1., 2., 3., 4.]).unwrap();
assert!(
    b == arr2(&[[1., 3.],
                [2., 4.]])
);

Create an array from a vector and interpret it according to the provided dimensions and strides. (No cloning of elements needed.)

Unsafe because dimension and strides are unchecked.

Create an array with uninitalized elements, shape shape.

Panics if the number of elements in shape would overflow usize.

Safety

Accessing uninitalized values is undefined behaviour. You must overwrite all the elements in the array after it is created; for example using the methods .fill() or .assign().

The contents of the array is indeterminate before initialization and it is an error to perform operations that use the previous values. For example it would not be legal to use a += 1.; on such an array.

This constructor is limited to elements where A: Copy (no destructors) to avoid users shooting themselves too hard in the foot; it is not a problem to drop an array created with this method even before elements are initialized. (Note that constructors from_shape_vec and from_shape_vec_unchecked allow the user yet more control).

Examples

#[macro_use(s)]
extern crate ndarray;

use ndarray::Array2;

// Example Task: Let's create a column shifted copy of a in b

fn shift_by_two(a: &Array2<f32>) -> Array2<f32> {
    let mut b = unsafe { Array2::uninitialized(a.dim()) };

    // two first columns in b are two last in a
    // rest of columns in b are the initial columns in a
    b.slice_mut(s![.., ..2]).assign(&a.slice(s![.., -2..]));
    b.slice_mut(s![.., 2..]).assign(&a.slice(s![.., ..-2]));

    // `b` is safe to use with all operations at this point
    b
}

impl<A, S, D> ArrayBase<S, D> where S: Data<Elem = A>, D: Dimension
[src]

Methods For All Array Types

Return the total number of elements in the array.

Return the length of axis.

The axis should be in the range Axis( 0 .. n ) where n is the number of dimensions (axes) of the array.

Panics if the axis is out of bounds.

Return the number of dimensions (axes) in the array

Return the shape of the array in its “pattern” form, an integer in the one-dimensional case, tuple in the n-dimensional cases and so on.

Return the shape of the array as it stored in the array.

Return the shape of the array as a slice.

Return the strides of the array as a slice

Return a read-only view of the array

Return a read-write view of the array

Return an uniquely owned copy of the array

Return a shared ownership (copy on write) array.

Turn the array into a shared ownership (copy on write) array, without any copying.

Return an iterator of references to the elements of the array.

Elements are visited in the logical order of the array, which is where the rightmost index is varying the fastest.

Iterator element type is &A.

Return an iterator of mutable references to the elements of the array.

Elements are visited in the logical order of the array, which is where the rightmost index is varying the fastest.

Iterator element type is &mut A.

Return an iterator of indexes and references to the elements of the array.

Elements are visited in the logical order of the array, which is where the rightmost index is varying the fastest.

Iterator element type is (D::Pattern, &A).

Return an iterator of indexes and mutable references to the elements of the array.

Elements are visited in the logical order of the array, which is where the rightmost index is varying the fastest.

Iterator element type is (D::Pattern, &mut A).

Return a sliced array.

See Slicing for full documentation. See also D::SliceArg.

Panics if an index is out of bounds or stride is zero.
(Panics if D is IxDyn and indexes does not match the number of array axes.)

Return a sliced read-write view of the array.

See also D::SliceArg.

Panics if an index is out of bounds or stride is zero.
(Panics if D is IxDyn and indexes does not match the number of array axes.)

Slice the array’s view in place.

See also D::SliceArg.

Panics if an index is out of bounds or stride is zero.
(Panics if D is IxDyn and indexes does not match the number of array axes.)

Return a reference to the element at index, or return None if the index is out of bounds.

Arrays also support indexing syntax: array[index].

use ndarray::arr2;

let a = arr2(&[[1., 2.],
               [3., 4.]]);

assert!(
    a.get((0, 1)) == Some(&2.) &&
    a.get((0, 2)) == None &&
    a[(0, 1)] == 2. &&
    a[[0, 1]] == 2.
);

Return a mutable reference to the element at index, or return None if the index is out of bounds.

Perform unchecked array indexing.

Return a reference to the element at index.

Note: only unchecked for non-debug builds of ndarray.

Perform unchecked array indexing.

Return a mutable reference to the element at index.

Note: Only unchecked for non-debug builds of ndarray.
Note: The array must be uniquely held when mutating it.

Swap elements at indices index1 and index2.

Indices may be equal.

Panics if an index is out of bounds.

Along axis, select the subview index and return a view with that axis removed.

See Subviews for full documentation.

Panics if axis or index is out of bounds.

use ndarray::{arr2, ArrayView, Axis};

let a = arr2(&[[1., 2. ],    // ... axis 0, row 0
               [3., 4. ],    // --- axis 0, row 1
               [5., 6. ]]);  // ... axis 0, row 2
//               .   \
//                .   axis 1, column 1
//                 axis 1, column 0
assert!(
    a.subview(Axis(0), 1) == ArrayView::from(&[3., 4.]) &&
    a.subview(Axis(1), 1) == ArrayView::from(&[2., 4., 6.])
);

Along axis, select the subview index and return a read-write view with the axis removed.

Panics if axis or index is out of bounds.

use ndarray::{arr2, aview2, Axis};

let mut a = arr2(&[[1., 2. ],
                   [3., 4. ]]);
//                   .   \
//                    .   axis 1, column 1
//                     axis 1, column 0

{
    let mut column1 = a.subview_mut(Axis(1), 1);
    column1 += 10.;
}

assert!(
    a == aview2(&[[1., 12.],
                  [3., 14.]])
);

Collapse dimension axis into length one, and select the subview of index along that axis.

Panics if index is past the length of the axis.

Along axis, select the subview index and return self with that axis removed.

See .subview() and Subviews for full documentation.

Along axis, select arbitrary subviews corresponding to indices and and copy them into a new array.

Panics if axis or an element of indices is out of bounds.

use ndarray::{arr2, Axis};

 let x = arr2(&[[0., 1.],
                [2., 3.],
                [4., 5.],
                [6., 7.],
                [8., 9.]]);

 let r = x.select(Axis(0), &[0, 4, 3]);
 assert!(
         r == arr2(&[[0., 1.],
                     [8., 9.],
                     [6., 7.]])
);

Return an iterator that traverses over all dimensions but the innermost, and yields each inner row.

For example, in a 2 × 2 × 3 array, the iterator element is a row of 3 elements (and there are 2 × 2 = 4 rows in total).

Iterator element is ArrayView1<A> (1D array view).

use ndarray::arr3;
let a = arr3(&[[[ 0,  1,  2],    // -- row 0, 0
                [ 3,  4,  5]],   // -- row 0, 1
               [[ 6,  7,  8],    // -- row 1, 0
                [ 9, 10, 11]]]); // -- row 1, 1
// `inner_iter` yields the four inner rows of the 3D array.
let mut row_sums = a.inner_iter().map(|v| v.scalar_sum());
assert_eq!(row_sums.collect::<Vec<_>>(), vec![3, 12, 21, 30]);

Return an iterator that traverses over all dimensions but the innermost, and yields each inner row.

Iterator element is ArrayViewMut1<A> (1D read-write array view).

Return an iterator that traverses over the outermost dimension and yields each subview.

This is equivalent to .axis_iter(Axis(0)).

Iterator element is ArrayView<A, D::Smaller> (read-only array view).

Return an iterator that traverses over the outermost dimension and yields each subview.

This is equivalent to .axis_iter_mut(Axis(0)).

Iterator element is ArrayViewMut<A, D::Smaller> (read-write array view).

Return an iterator that traverses over axis and yields each subview along it.

For example, in a 3 × 4 × 5 array, with axis equal to Axis(2), the iterator element is a 3 × 4 subview (and there are 5 in total), as shown in the picture below.

Iterator element is ArrayView<A, D::Smaller> (read-only array view).

See Subviews for full documentation.

Panics if axis is out of bounds.

Return an iterator that traverses over axis and yields each mutable subview along it.

Iterator element is ArrayViewMut<A, D::Smaller> (read-write array view).

Panics if axis is out of bounds.

Return an iterator that traverses over axis by chunks of size, yielding non-overlapping views along that axis.

Iterator element is ArrayView<A, D>

The last view may have less elements if size does not divide the axis' dimension.

Panics if axis is out of bounds.

use ndarray::Array;
use ndarray::{arr3, Axis};

let a = Array::from_iter(0..28).into_shape((2, 7, 2)).unwrap();
let mut iter = a.axis_chunks_iter(Axis(1), 2);

// first iteration yields a 2 × 2 × 2 view
assert_eq!(iter.next().unwrap(),
           arr3(&[[[ 0,  1], [ 2, 3]],
                  [[14, 15], [16, 17]]]));

// however the last element is a 2 × 1 × 2 view since 7 % 2 == 1
assert_eq!(iter.next_back().unwrap(), arr3(&[[[12, 13]],
                                             [[26, 27]]]));

Return an iterator that traverses over axis by chunks of size, yielding non-overlapping read-write views along that axis.

Iterator element is ArrayViewMut<A, D>

Panics if axis is out of bounds.

Return a whole chunks producer (and iterable).

It produces the whole chunks of a given n-dimensional chunk size, skipping the remainder along each dimension that doesn't fit evenly.

Iterator element is ArrayView<A, D>

Panics if any dimension of chunk_size is zero

Return an view of the diagonal elements of the array.

The diagonal is simply the sequence indexed by (0, 0, .., 0), (1, 1, ..., 1) etc as long as all axes have elements.

Return a read-write view over the diagonal elements of the array.

Return the diagonal as a one-dimensional array.

Return true if the array data is laid out in contiguous “C order” in memory (where the last index is the most rapidly varying).

Return false otherwise, i.e the array is possibly not contiguous in memory, it has custom strides, etc.

Return a pointer to the first element in the array.

Raw access to array elements needs to follow the strided indexing scheme: an element at multi-index I in an array with strides S is located at offset

Σ0 ≤ k < d Ik × Sk

where d is self.ndim().

Return a mutable pointer to the first element in the array.

Return the array’s data as a slice, if it is contiguous and in standard order. Return None otherwise.

If this function returns Some(_), then the element order in the slice corresponds to the logical order of the array’s elements.

Return the array’s data as a slice, if it is contiguous and in standard order. Return None otherwise.

Return the array’s data as a slice if it is contiguous, return None otherwise.

If this function returns Some(_), then the elements in the slice have whatever order the elements have in memory.

Implementation notes: Does not yet support negatively strided arrays.

Return the array’s data as a slice if it is contiguous, return None otherwise.

Transform the array into shape; any shape with the same number of elements is accepted, but the source array or view must be contiguous, otherwise we cannot rearrange the dimension.

Errors if the shapes don't have the same number of elements.
Errors if the input array is not c- or f-contiguous.

use ndarray::{aview1, aview2};

assert!(
    aview1(&[1., 2., 3., 4.]).into_shape((2, 2)).unwrap()
    == aview2(&[[1., 2.],
                [3., 4.]])
);

Note: Reshape is for RcArray only. Use .into_shape() for other arrays and array views.

Transform the array into shape; any shape with the same number of elements is accepted.

May clone all elements if needed to arrange elements in standard layout (and break sharing).

Panics if shapes are incompatible.

use ndarray::{rcarr1, rcarr2};

assert!(
    rcarr1(&[1., 2., 3., 4.]).reshape((2, 2))
    == rcarr2(&[[1., 2.],
                [3., 4.]])
);

Act like a larger size and/or shape array by broadcasting into a larger shape, if possible.

Return None if shapes can not be broadcast together.

Background

  • Two axes are compatible if they are equal, or one of them is 1.
  • In this instance, only the axes of the smaller side (self) can be 1.

Compare axes beginning with the last axis of each shape.

For example (1, 2, 4) can be broadcast into (7, 6, 2, 4) because its axes are either equal or 1 (or missing); while (2, 2) can not be broadcast into (2, 4).

The implementation creates a view with strides set to zero for the axes that are to be repeated.

The broadcasting documentation for Numpy has more information.

use ndarray::{aview1, aview2};

assert!(
    aview1(&[1., 0.]).broadcast((10, 2)).unwrap()
    == aview2(&[[1., 0.]; 10])
);

Swap axes ax and bx.

This does not move any data, it just adjusts the array’s dimensions and strides.

Panics if the axes are out of bounds.

use ndarray::arr2;

let mut a = arr2(&[[1., 2., 3.]]);
a.swap_axes(0, 1);
assert!(
    a == arr2(&[[1.], [2.], [3.]])
);

Transpose the array by reversing axes.

Transposition reverses the order of the axes (dimensions and strides) while retaining the same data.

Return a transposed view of the array.

This is a shorthand for self.view().reversed_axes().

See also the more general methods .reversed_axes() and .swap_axes().

Return an iterator over the length and stride of each axis.

Return the axis with the greatest stride (by absolute value), preferring axes with len > 1.

Reverse the stride of axis.

Panics if the axis is out of bounds.

If possible, merge in the axis take to into.

use ndarray::Array3;
use ndarray::Axis;

let mut a = Array3::<f64>::zeros((2, 3, 4));
a.merge_axes(Axis(1), Axis(2));
assert_eq!(a.shape(), &[2, 1, 12]);

Panics if an axis is out of bounds.

Remove array axis axis and return the result.

Perform an elementwise assigment to self from rhs.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

Perform an elementwise assigment to self from element x.

Traverse two arrays in unspecified order, in lock step, calling the closure f on each element pair.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

Traverse the array elements and apply a fold, returning the resulting value.

Elements are visited in arbitrary order.

Call f by reference on each element and create a new array with the new values.

Elements are visited in arbitrary order.

Return an array with the same shape as self.

use ndarray::arr2;

let a = arr2(&[[ 0., 1.],
               [-1., 2.]]);
assert!(
    a.map(|x| *x >= 1.0)
    == arr2(&[[false, true],
              [false, true]])
);

Call f by value on each element and create a new array with the new values.

Elements are visited in arbitrary order.

Return an array with the same shape as self.

use ndarray::arr2;

let a = arr2(&[[ 0., 1.],
               [-1., 2.]]);
assert!(
    a.mapv(f32::abs) == arr2(&[[0., 1.],
                               [1., 2.]])
);

Call f by value on each element, update the array with the new values and return it.

Elements are visited in arbitrary order.

Modify the array in place by calling f by mutable reference on each element.

Elements are visited in arbitrary order.

Modify the array in place by calling f by value on each element. The array is updated with the new values.

Elements are visited in arbitrary order.

use ndarray::arr2;

let mut a = arr2(&[[ 0., 1.],
                   [-1., 2.]]);
a.mapv_inplace(f32::exp);
assert!(
    a.all_close(&arr2(&[[1.00000, 2.71828],
                        [0.36788, 7.38906]]), 1e-5)
);

Visit each element in the array by calling f by reference on each element.

Elements are visited in arbitrary order.

Fold along an axis.

Combine the elements of each subview with the previous using the fold function and initial value init.

Return the result as an Array.

Reduce the values along an axis into just one value, producing a new array with one less dimension.

Elements are visited in arbitrary order.

Return the result as an Array.

Panics if axis is out of bounds.

impl<A, D> ArrayBase<Vec<A>, D> where D: Dimension
[src]

Return a vector of the elements in the array, in the way they are stored internally.

If the array is in standard memory layout, the logical element order of the array (.iter() order) and of the returned vector will be the same.

impl<A, D> ArrayBase<Rc<Vec<A>>, D> where A: Clone, D: Dimension
[src]

Convert an RcArray into Array; cloning the array elements to unshare them if necessary.

impl<A, S> ArrayBase<S, Ix1> where S: Data<Elem = A>
[src]

Return an vector with the elements of the one-dimensional array.

impl<A, S> ArrayBase<S, Ix2> where S: Data<Elem = A>
[src]

Return an array view of row index.

Panics if index is out of bounds.

Return a mutable array view of row index.

Panics if index is out of bounds.

Return the number of rows (length of Axis(0)) in the two-dimensional array.

Return an array view of column index.

Panics if index is out of bounds.

Return a mutable array view of column index.

Panics if index is out of bounds.

Return the number of columns (length of Axis(1)) in the two-dimensional array.

Return true if the array is square, false otherwise.

impl<A, S, D> ArrayBase<S, D> where S: Data<Elem = A>, D: Dimension
[src]

Numerical methods for arrays.

Return the sum of all elements in the array.

use ndarray::arr2;

let a = arr2(&[[1., 2.],
               [3., 4.]]);
assert_eq!(a.scalar_sum(), 10.);

Return sum along axis.

use ndarray::{aview0, aview1, arr2, Axis};

let a = arr2(&[[1., 2.],
               [3., 4.]]);
assert!(
    a.sum(Axis(0)) == aview1(&[4., 6.]) &&
    a.sum(Axis(1)) == aview1(&[3., 7.]) &&

    a.sum(Axis(0)).sum(Axis(0)) == aview0(&10.)
);

Panics if axis is out of bounds.

Return mean along axis.

Panics if axis is out of bounds.

use ndarray::{aview1, arr2, Axis};

let a = arr2(&[[1., 2.],
               [3., 4.]]);
assert!(
    a.mean(Axis(0)) == aview1(&[2.0, 3.0]) &&
    a.mean(Axis(1)) == aview1(&[1.5, 3.5])
);

Return true if the arrays' elementwise differences are all within the given absolute tolerance, false otherwise.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting to the same shape isn’t possible.

impl<A, S> ArrayBase<S, Ix1> where S: Data<Elem = A>
[src]

Compute the dot product of one-dimensional arrays.

The dot product is a sum of the elementwise products (no conjugation of complex operands, and thus not their inner product).

Panics if the arrays are not of the same length.

impl<A, S> ArrayBase<S, Ix2> where S: Data<Elem = A>
[src]

Perform matrix multiplication of rectangular arrays self and rhs.

Rhs may be either a one-dimensional or a two-dimensional array.

If Rhs is two-dimensional, they array shapes must agree in the way that if self is M × N, then rhs is N × K.

Return a result array with shape M × K.

Panics if shapes are incompatible.

use ndarray::arr2;

let a = arr2(&[[1., 2.],
               [0., 1.]]);
let b = arr2(&[[1., 2.],
               [2., 3.]]);

assert!(
    a.dot(&b) == arr2(&[[5., 8.],
                        [2., 3.]])
);

impl<A, S, D> ArrayBase<S, D> where S: Data<Elem = A>, D: Dimension
[src]

Perform the operation self += alpha * rhs efficiently, where alpha is a scalar and rhs is another array. This operation is also known as axpy in BLAS.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

impl<'a, A, D> ArrayBase<ViewRepr<&'a A>, D> where D: Dimension
[src]

Methods Specific to Array Views

Methods for read-only array views ArrayView<'a, A, D>

Note that array views implement traits like From and IntoIterator too.

Create a read-only array view borrowing its data from a slice.

Checks whether shape are compatible with the slice's length, returning an Err if not compatible.

use ndarray::ArrayView;
use ndarray::arr3;
use ndarray::ShapeBuilder;

let s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let a = ArrayView::from_shape((2, 3, 2).strides((1, 4, 2)),
                              &s).unwrap();

assert!(
    a == arr3(&[[[0, 2],
                 [4, 6],
                 [8, 10]],
                [[1, 3],
                 [5, 7],
                 [9, 11]]])
);
assert!(a.strides() == &[1, 4, 2]);

Create an ArrayView<A, D> from shape information and a raw pointer to the elements.

Unsafe because caller is responsible for ensuring that the pointer is valid, not mutably aliased and coherent with the dimension and stride information.

Split the array along axis and return one view strictly before the split and one view after the split.

Panics if axis or index is out of bounds.

Below, an illustration of .split_at(Axis(2), 2) on an array with shape 3 × 5 × 5.

Return the array’s data as a slice, if it is contiguous and in standard order. Return None otherwise.

impl<'a, A, D> ArrayBase<ViewRepr<&'a mut A>, D> where D: Dimension
[src]

Methods for read-write array views ArrayViewMut<'a, A, D>

Note that array views implement traits like From and IntoIterator too.

Create a read-write array view borrowing its data from a slice.

Checks whether dim and strides are compatible with the slice's length, returning an Err if not compatible.

use ndarray::ArrayViewMut;
use ndarray::arr3;
use ndarray::ShapeBuilder;

let mut s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let mut a = ArrayViewMut::from_shape((2, 3, 2).strides((1, 4, 2)),
                                     &mut s).unwrap();

a[[0, 0, 0]] = 1;
assert!(
    a == arr3(&[[[1, 2],
                 [4, 6],
                 [8, 10]],
                [[1, 3],
                 [5, 7],
                 [9, 11]]])
);
assert!(a.strides() == &[1, 4, 2]);

Create an ArrayViewMut<A, D> from shape information and a raw pointer to the elements.

Unsafe because caller is responsible for ensuring that the pointer is valid, not aliased and coherent with the dimension and stride information.

Split the array along axis and return one mutable view strictly before the split and one mutable view after the split.

Panics if axis or index is out of bounds.

Return the array’s data as a slice, if it is contiguous and in standard order. Return None otherwise.

Trait Implementations

impl<S, D, I> Index<I> for ArrayBase<S, D> where D: Dimension,
        I: NdIndex<D>,
        S: Data
[src]

Access the element at index.

Panics if index is out of bounds.

The returned type after indexing

The method for the indexing (container[index]) operation

impl<S, D, I> IndexMut<I> for ArrayBase<S, D> where D: Dimension,
        I: NdIndex<D>,
        S: DataMut
[src]

Access the element at index mutably.

Panics if index is out of bounds.

The method for the mutable indexing (container[index]) operation

impl<S, S2, D> PartialEq<ArrayBase<S2, D>> for ArrayBase<S, D> where D: Dimension,
        S: Data,
        S2: Data<Elem = S::Elem>,
        S::Elem: PartialEq
[src]

Return true if the array shapes and all elements of self and rhs are equal. Return false otherwise.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<S, D> Eq for ArrayBase<S, D> where D: Dimension, S: Data, S::Elem: Eq
[src]

impl<A, S> FromIterator<A> for ArrayBase<S, Ix1> where S: DataOwned<Elem = A>
[src]

Creates a value from an iterator. Read more

impl<'a, S, D> IntoIterator for &'a ArrayBase<S, D> where D: Dimension, S: Data
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

impl<'a, S, D> IntoIterator for &'a mut ArrayBase<S, D> where D: Dimension,
        S: DataMut
[src]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Creates an iterator from a value. Read more

impl<'a, S, D> Hash for ArrayBase<S, D> where D: Dimension,
        S: Data,
        S::Elem: Hash
[src]

Feeds this value into the state given, updating the hasher as necessary.

Feeds a slice of this type into the state provided.

impl<S, D> Sync for ArrayBase<S, D> where S: Sync + Data, D: Sync
[src]

ArrayBase is Sync when the storage type is.

impl<S, D> Send for ArrayBase<S, D> where S: Send + Data, D: Send
[src]

ArrayBase is Send when the storage type is.

impl<'a, A, Slice: ?Sized> From<&'a Slice> for ArrayBase<ViewRepr<&'a A>, Ix1> where Slice: AsRef<[A]>
[src]

Implementation of ArrayView::from(&S) where S is a slice or slicable.

Create a one-dimensional read-only array view of the data in slice.

Performs the conversion.

impl<'a, A, S, D> From<&'a ArrayBase<S, D>> for ArrayBase<ViewRepr<&'a A>, D> where S: Data<Elem = A>,
        D: Dimension
[src]

Implementation of ArrayView::from(&A) where A is an array.

Create a read-only array view of the array.

Performs the conversion.

impl<'a, A, Slice: ?Sized> From<&'a mut Slice> for ArrayBase<ViewRepr<&'a mut A>, Ix1> where Slice: AsMut<[A]>
[src]

Implementation of ArrayViewMut::from(&mut S) where S is a slice or slicable.

Create a one-dimensional read-write array view of the data in slice.

Performs the conversion.

impl<'a, A, S, D> From<&'a mut ArrayBase<S, D>> for ArrayBase<ViewRepr<&'a mut A>, D> where S: DataMut<Elem = A>,
        D: Dimension
[src]

Implementation of ArrayViewMut::from(&mut A) where A is an array.

Create a read-write array view of the array.

Performs the conversion.

impl<A, S, D> Default for ArrayBase<S, D> where S: DataOwned<Elem = A>,
        D: Dimension,
        A: Default
[src]

Create an owned array with a default state.

The array is created with dimension D::default(), which results in for example dimensions 0 and (0, 0) with zero elements for the one-dimensional and two-dimensional cases respectively, while for example the zero dimensional case uses () (or Vec::new()) which results in an array with one element.

Since arrays cannot grow, the intention is to use the default value as placeholder.

Returns the "default value" for a type. Read more

impl<A, D, S> Serialize for ArrayBase<S, D> where A: Serialize,
        D: Dimension + Serialize,
        S: Data<Elem = A>
[src]

Requires crate feature "serde"

Serialize this value into the given Serde serializer. Read more

impl<A, Di, S> Deserialize for ArrayBase<S, Di> where A: Deserialize,
        Di: Deserialize + Dimension,
        S: DataOwned<Elem = A>
[src]

Requires crate feature "serde"

Deserialize this value from the given Serde deserializer. Read more

impl<A, S, D> Encodable for ArrayBase<S, D> where A: Encodable,
        D: Dimension + Encodable,
        S: Data<Elem = A>
[src]

Requires crate feature "rustc-serialize"

Serialize a value using an Encoder.

impl<A, S, D> Decodable for ArrayBase<S, D> where A: Decodable,
        D: Dimension + Decodable,
        S: DataOwned<Elem = A>
[src]

Requires crate feature "rustc-serialize"

Deserialize a value using a Decoder.

impl<'a, A: Display, S, D: Dimension> Display for ArrayBase<S, D> where S: Data<Elem = A>
[src]

Format the array using Display and apply the formatting parameters used to each element.

The array is shown in multiline style, unless the alternate form is used, {:#}.

Formats the value using the given formatter. Read more

impl<'a, A: Debug, S, D: Dimension> Debug for ArrayBase<S, D> where S: Data<Elem = A>
[src]

Format the array using Debug and apply the formatting parameters used to each element.

The array is shown in multiline style, unless the alternate form is used, {:#?}.

Formats the value using the given formatter.

impl<'a, A: LowerExp, S, D: Dimension> LowerExp for ArrayBase<S, D> where S: Data<Elem = A>
[src]

Format the array using LowerExp and apply the formatting parameters used to each element.

The array is shown in multiline style, unless the alternate form is used, {:#e}.

Formats the value using the given formatter.

impl<'a, A: UpperExp, S, D: Dimension> UpperExp for ArrayBase<S, D> where S: Data<Elem = A>
[src]

Format the array using UpperExp and apply the formatting parameters used to each element.

The array is shown in multiline style, unless the alternate form is used, {:#E}.

Formats the value using the given formatter.

impl<'a, A: LowerHex, S, D: Dimension> LowerHex for ArrayBase<S, D> where S: Data<Elem = A>
[src]

Format the array using LowerHex and apply the formatting parameters used to each element.

The array is shown in multiline style, unless the alternate form is used, {:#x}.

Formats the value using the given formatter.

impl<'a, A: 'a, S, D> IntoNdProducer for &'a ArrayBase<S, D> where D: Dimension,
        S: Data<Elem = A>
[src]

An array reference is an n-dimensional producer of element references (like ArrayView).

impl<'a, A: 'a, S, D> IntoNdProducer for &'a mut ArrayBase<S, D> where D: Dimension,
        S: DataMut<Elem = A>
[src]

A mutable array reference is an n-dimensional producer of mutable element references (like ArrayViewMut).

impl<S: DataClone, D: Clone> Clone for ArrayBase<S, D>
[src]

Returns a copy of the value. Read more

Array implements .clone_from() to reuse an array's existing allocation. Semantically equivalent to *self = other.clone(), but potentially more efficient.

impl<S: DataClone + Copy, D: Copy> Copy for ArrayBase<S, D>
[src]

impl<A, S, S2> Dot<ArrayBase<S2, Ix2>> for ArrayBase<S, Ix2> where S: Data<Elem = A>,
        S2: Data<Elem = A>,
        A: LinalgScalar
[src]

The result of the operation. Read more

impl<A, S, S2> Dot<ArrayBase<S2, Ix1>> for ArrayBase<S, Ix2> where S: Data<Elem = A>,
        S2: Data<Elem = A>,
        A: LinalgScalar
[src]

Perform the matrix multiplication of the rectangular array self and column vector rhs.

The array shapes must agree in the way that if self is M × N, then rhs is N.

Return a result array with shape M.

Panics if shapes are incompatible.

The result of the operation. Read more

impl<A, S, S2, D, E> Add<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Add<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise addition between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the + operator

The method for the + operator

impl<'a, A, S, S2, D, E> Add<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Add<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise addition between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the + operator

The method for the + operator

impl<'a, 'b, A, S, S2, D, E> Add<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Add<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise addition between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the + operator

The method for the + operator

impl<A, S, D, B> Add<B> for ArrayBase<S, D> where A: Clone + Add<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise addition between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the + operator

The method for the + operator

impl<'a, A, S, D, B> Add<B> for &'a ArrayBase<S, D> where A: Clone + Add<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise addition between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the + operator

The method for the + operator

impl<A, S, S2, D, E> Sub<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Sub<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise subtraction between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the - operator

The method for the - operator

impl<'a, A, S, S2, D, E> Sub<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Sub<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise subtraction between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the - operator

The method for the - operator

impl<'a, 'b, A, S, S2, D, E> Sub<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Sub<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise subtraction between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the - operator

The method for the - operator

impl<A, S, D, B> Sub<B> for ArrayBase<S, D> where A: Clone + Sub<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise subtraction between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the - operator

The method for the - operator

impl<'a, A, S, D, B> Sub<B> for &'a ArrayBase<S, D> where A: Clone + Sub<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise subtraction between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the - operator

The method for the - operator

impl<A, S, S2, D, E> Mul<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Mul<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise multiplication between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the * operator

The method for the * operator

impl<'a, A, S, S2, D, E> Mul<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Mul<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise multiplication between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the * operator

The method for the * operator

impl<'a, 'b, A, S, S2, D, E> Mul<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Mul<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise multiplication between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the * operator

The method for the * operator

impl<A, S, D, B> Mul<B> for ArrayBase<S, D> where A: Clone + Mul<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise multiplication between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the * operator

The method for the * operator

impl<'a, A, S, D, B> Mul<B> for &'a ArrayBase<S, D> where A: Clone + Mul<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise multiplication between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the * operator

The method for the * operator

impl<A, S, S2, D, E> Div<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Div<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise division between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the / operator

The method for the / operator

impl<'a, A, S, S2, D, E> Div<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Div<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise division between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the / operator

The method for the / operator

impl<'a, 'b, A, S, S2, D, E> Div<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Div<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise division between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the / operator

The method for the / operator

impl<A, S, D, B> Div<B> for ArrayBase<S, D> where A: Clone + Div<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise division between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the / operator

The method for the / operator

impl<'a, A, S, D, B> Div<B> for &'a ArrayBase<S, D> where A: Clone + Div<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise division between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the / operator

The method for the / operator

impl<A, S, S2, D, E> Rem<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Rem<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise remainder between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the % operator

The method for the % operator

impl<'a, A, S, S2, D, E> Rem<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Rem<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise remainder between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the % operator

The method for the % operator

impl<'a, 'b, A, S, S2, D, E> Rem<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Rem<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise remainder between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the % operator

The method for the % operator

impl<A, S, D, B> Rem<B> for ArrayBase<S, D> where A: Clone + Rem<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise remainder between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the % operator

The method for the % operator

impl<'a, A, S, D, B> Rem<B> for &'a ArrayBase<S, D> where A: Clone + Rem<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise remainder between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the % operator

The method for the % operator

impl<A, S, S2, D, E> BitAnd<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitAnd<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit and between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the & operator

The method for the & operator

impl<'a, A, S, S2, D, E> BitAnd<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitAnd<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit and between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the & operator

The method for the & operator

impl<'a, 'b, A, S, S2, D, E> BitAnd<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + BitAnd<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit and between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the & operator

The method for the & operator

impl<A, S, D, B> BitAnd<B> for ArrayBase<S, D> where A: Clone + BitAnd<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise bit and between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the & operator

The method for the & operator

impl<'a, A, S, D, B> BitAnd<B> for &'a ArrayBase<S, D> where A: Clone + BitAnd<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise bit and between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the & operator

The method for the & operator

impl<A, S, S2, D, E> BitOr<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitOr<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit or between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the | operator

The method for the | operator

impl<'a, A, S, S2, D, E> BitOr<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitOr<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit or between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the | operator

The method for the | operator

impl<'a, 'b, A, S, S2, D, E> BitOr<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + BitOr<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit or between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the | operator

The method for the | operator

impl<A, S, D, B> BitOr<B> for ArrayBase<S, D> where A: Clone + BitOr<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise bit or between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the | operator

The method for the | operator

impl<'a, A, S, D, B> BitOr<B> for &'a ArrayBase<S, D> where A: Clone + BitOr<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise bit or between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the | operator

The method for the | operator

impl<A, S, S2, D, E> BitXor<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitXor<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit xor between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the ^ operator

The method for the ^ operator

impl<'a, A, S, S2, D, E> BitXor<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitXor<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit xor between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the ^ operator

The method for the ^ operator

impl<'a, 'b, A, S, S2, D, E> BitXor<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + BitXor<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise bit xor between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the ^ operator

The method for the ^ operator

impl<A, S, D, B> BitXor<B> for ArrayBase<S, D> where A: Clone + BitXor<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise bit xor between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the ^ operator

The method for the ^ operator

impl<'a, A, S, D, B> BitXor<B> for &'a ArrayBase<S, D> where A: Clone + BitXor<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise bit xor between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the ^ operator

The method for the ^ operator

impl<A, S, S2, D, E> Shl<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Shl<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise left shift between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the << operator

The method for the << operator

impl<'a, A, S, S2, D, E> Shl<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Shl<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise left shift between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the << operator

The method for the << operator

impl<'a, 'b, A, S, S2, D, E> Shl<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Shl<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise left shift between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the << operator

The method for the << operator

impl<A, S, D, B> Shl<B> for ArrayBase<S, D> where A: Clone + Shl<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise left shift between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the << operator

The method for the << operator

impl<'a, A, S, D, B> Shl<B> for &'a ArrayBase<S, D> where A: Clone + Shl<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise left shift between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the << operator

The method for the << operator

impl<A, S, S2, D, E> Shr<ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Shr<A, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise right shift between self and rhs, and return the result (based on self).

self must be an Array or RcArray.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the >> operator

The method for the >> operator

impl<'a, A, S, S2, D, E> Shr<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + Shr<A, Output = A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise right shift between self and reference rhs, and return the result (based on self).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the >> operator

The method for the >> operator

impl<'a, 'b, A, S, S2, D, E> Shr<&'a ArrayBase<S2, E>> for &'b ArrayBase<S, D> where A: Clone + Shr<A, Output = A>,
        S: Data<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform elementwise right shift between references self and rhs, and return the result as a new Array.

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The resulting type after applying the >> operator

The method for the >> operator

impl<A, S, D, B> Shr<B> for ArrayBase<S, D> where A: Clone + Shr<B, Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise right shift between self and the scalar x, and return the result (based on self).

self must be an Array or RcArray.

The resulting type after applying the >> operator

The method for the >> operator

impl<'a, A, S, D, B> Shr<B> for &'a ArrayBase<S, D> where A: Clone + Shr<B, Output = A>,
        S: Data<Elem = A>,
        D: Dimension,
        B: ScalarOperand
[src]

Perform elementwise right shift between the reference self and the scalar x, and return the result as a new Array.

The resulting type after applying the >> operator

The method for the >> operator

impl<A, S, D> Neg for ArrayBase<S, D> where A: Clone + Neg<Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension
[src]

The resulting type after applying the - operator

Perform an elementwise negation of self and return the result.

impl<A, S, D> Not for ArrayBase<S, D> where A: Clone + Not<Output = A>,
        S: DataOwned<Elem = A> + DataMut,
        D: Dimension
[src]

The resulting type after applying the ! operator

Perform an elementwise unary not of self and return the result.

impl<'a, A, S, S2, D, E> AddAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + AddAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self += rhs as elementwise addition (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the += operator

impl<A, S, D> AddAssign<A> for ArrayBase<S, D> where A: ScalarOperand + AddAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self += rhs as elementwise addition (in place).

The method for the += operator

impl<'a, A, S, S2, D, E> SubAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + SubAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self -= rhs as elementwise subtraction (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the -= operator

impl<A, S, D> SubAssign<A> for ArrayBase<S, D> where A: ScalarOperand + SubAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self -= rhs as elementwise subtraction (in place).

The method for the -= operator

impl<'a, A, S, S2, D, E> MulAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + MulAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self *= rhs as elementwise multiplication (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the *= operator

impl<A, S, D> MulAssign<A> for ArrayBase<S, D> where A: ScalarOperand + MulAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self *= rhs as elementwise multiplication (in place).

The method for the *= operator

impl<'a, A, S, S2, D, E> DivAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + DivAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self /= rhs as elementwise division (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the /= operator

impl<A, S, D> DivAssign<A> for ArrayBase<S, D> where A: ScalarOperand + DivAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self /= rhs as elementwise division (in place).

The method for the /= operator

impl<'a, A, S, S2, D, E> RemAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + RemAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self %= rhs as elementwise remainder (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the %= operator

impl<A, S, D> RemAssign<A> for ArrayBase<S, D> where A: ScalarOperand + RemAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self %= rhs as elementwise remainder (in place).

The method for the %= operator

impl<'a, A, S, S2, D, E> BitAndAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitAndAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self &= rhs as elementwise bit and (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the &= operator

impl<A, S, D> BitAndAssign<A> for ArrayBase<S, D> where A: ScalarOperand + BitAndAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self &= rhs as elementwise bit and (in place).

The method for the &= operator

impl<'a, A, S, S2, D, E> BitOrAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitOrAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self |= rhs as elementwise bit or (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the |= operator

impl<A, S, D> BitOrAssign<A> for ArrayBase<S, D> where A: ScalarOperand + BitOrAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self |= rhs as elementwise bit or (in place).

The method for the |= operator

impl<'a, A, S, S2, D, E> BitXorAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + BitXorAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self ^= rhs as elementwise bit xor (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the ^= operator

impl<A, S, D> BitXorAssign<A> for ArrayBase<S, D> where A: ScalarOperand + BitXorAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self ^= rhs as elementwise bit xor (in place).

The method for the ^= operator

impl<'a, A, S, S2, D, E> ShlAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + ShlAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self <<= rhs as elementwise left shift (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the <<= operator

impl<A, S, D> ShlAssign<A> for ArrayBase<S, D> where A: ScalarOperand + ShlAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self <<= rhs as elementwise left shift (in place).

The method for the <<= operator

impl<'a, A, S, S2, D, E> ShrAssign<&'a ArrayBase<S2, E>> for ArrayBase<S, D> where A: Clone + ShrAssign<A>,
        S: DataMut<Elem = A>,
        S2: Data<Elem = A>,
        D: Dimension,
        E: Dimension
[src]

Perform self >>= rhs as elementwise right shift (in place).

If their shapes disagree, rhs is broadcast to the shape of self.

Panics if broadcasting isn’t possible.

The method for the >>= operator

impl<A, S, D> ShrAssign<A> for ArrayBase<S, D> where A: ScalarOperand + ShrAssign<A>,
        S: DataMut<Elem = A>,
        D: Dimension
[src]

Perform self >>= rhs as elementwise right shift (in place).

The method for the >>= operator