pub struct Grid<A: Ord> { /* private fields */ }
Expand description

An orthogonal partition of a rectangular region in an n-dimensional space, e.g. [a0, b0) × ⋯ × [an−1, bn−1), represented as a collection of rectangular n-dimensional bins.

The grid is solely determined by the Cartesian product of its projections on each coordinate axis. Therefore, each element in the product set should correspond to a sub-region in the grid.

For example, this partition can be represented as a Grid struct:


g +---+-------+---+
  | 3 |   4   | 5 |
f +---+-------+---+
  |   |       |   |
  | 0 |   1   | 2 |
  |   |       |   |
e +---+-------+---+
  a   b       c   d

R0:    [a, b) × [e, f)
R1:    [b, c) × [e, f)
R2:    [c, d) × [e, f)
R3:    [a, b) × [f, g)
R4:    [b, d) × [f, g)
R5:    [c, d) × [f, g)
Grid:  { [a, b), [b, c), [c, d) } × { [e, f), [f, g) } == { R0, R1, R2, R3, R4, R5 }

while the next one can’t:

 g  +---+-----+---+
    |   |  2  | 3 |
(f) |   +-----+---+
    | 0 |         |
    |   |    1    |
    |   |         |
 e  +---+-----+---+
    a   b     c   d

R0:    [a, b) × [e, g)
R1:    [b, d) × [e, f)
R2:    [b, c) × [f, g)
R3:    [c, d) × [f, g)
// 'f', as long as 'R1', 'R2', or 'R3', doesn't appear on LHS
// [b, c) × [e, g), [c, d) × [e, g) doesn't appear on RHS
Grid:  { [a, b), [b, c), [c, d) } × { [e, g) } != { R0, R1, R2, R3 }

Examples

Basic usage, building a Grid via GridBuilder, with optimal grid layout determined by a given strategy, and generating a histogram:

use ndarray::{Array, array};
use ndarray_stats::{
    histogram::{strategies::Auto, Bins, Edges, Grid, GridBuilder},
    HistogramExt,
};

// 1-dimensional observations, as a (n_observations, n_dimension) 2-d matrix
let observations = Array::from_shape_vec(
    (12, 1),
    vec![1, 4, 5, 2, 100, 20, 50, 65, 27, 40, 45, 23],
).unwrap();

// The optimal grid layout is inferred from the data, given a chosen strategy, Auto in this case
let grid = GridBuilder::<Auto<usize>>::from_array(&observations).unwrap().build();

let histogram = observations.histogram(grid);

let histogram_matrix = histogram.counts();
// Bins are left-closed, right-open!
let expected = array![4, 3, 3, 1, 0, 1];
assert_eq!(histogram_matrix, expected.into_dyn());

Implementations

Returns the number of dimensions of the region partitioned by the grid.

Examples
use ndarray_stats::histogram::{Edges, Bins, Grid};

let edges = Edges::from(vec![0, 1]);
let bins = Bins::new(edges);
let square_grid = Grid::from(vec![bins.clone(), bins.clone()]);

assert_eq!(square_grid.ndim(), 2usize)

Returns the numbers of bins along each coordinate axis.

Examples
use ndarray_stats::histogram::{Edges, Bins, Grid};

let edges_x = Edges::from(vec![0, 1]);
let edges_y = Edges::from(vec![-1, 0, 1]);
let bins_x = Bins::new(edges_x);
let bins_y = Bins::new(edges_y);
let square_grid = Grid::from(vec![bins_x, bins_y]);

assert_eq!(square_grid.shape(), vec![1usize, 2usize]);

Returns the grid projections on each coordinate axis as a slice of immutable references.

Returns an n-dimensional index, of bins along each axis that contains the point, if one exists.

Returns None if the point is outside the grid.

Panics

Panics if dimensionality of the point doesn’t equal the grid’s.

Examples

Basic usage:

use ndarray::array;
use ndarray_stats::histogram::{Edges, Bins, Grid};
use noisy_float::types::n64;

let edges = Edges::from(vec![n64(-1.), n64(0.), n64(1.)]);
let bins = Bins::new(edges);
let square_grid = Grid::from(vec![bins.clone(), bins.clone()]);

// (0., -0.7) falls in 1st and 0th bin respectively
assert_eq!(
    square_grid.index_of(&array![n64(0.), n64(-0.7)]),
    Some(vec![1, 0]),
);
// Returns `None`, as `1.` is outside the grid since bins are right-open
assert_eq!(
    square_grid.index_of(&array![n64(0.), n64(1.)]),
    None,
);

A panic upon dimensionality mismatch:

// the point has 3 dimensions, the grid expected 2 dimensions
assert_eq!(
    square_grid.index_of(&array![n64(0.), n64(-0.7), n64(0.5)]),
    Some(vec![1, 0, 1]),
);

Given an n-dimensional index, i = (i_0, ..., i_{n-1}), returns an n-dimensional bin, I_{i_0} x ... x I_{i_{n-1}}, where I_{i_j} is the i_j-th interval on the j-th projection of the grid on the coordinate axes.

Panics

Panics if at least one in the index, (i_0, ..., i_{n-1}), is out of bounds on the corresponding coordinate axis, i.e. if there exists j s.t. i_j >= self.projections[j].len().

Examples

Basic usage:

use ndarray::array;
use ndarray_stats::histogram::{Edges, Bins, Grid};

let edges_x = Edges::from(vec![0, 1]);
let edges_y = Edges::from(vec![2, 3, 4]);
let bins_x = Bins::new(edges_x);
let bins_y = Bins::new(edges_y);
let square_grid = Grid::from(vec![bins_x, bins_y]);

// Query the 0-th bin on x-axis, and 1-st bin on y-axis
assert_eq!(
    square_grid.index(&[0, 1]),
    vec![0..1, 3..4],
);

A panic upon out-of-bounds:

// out-of-bound on y-axis
assert_eq!(
    square_grid.index(&[0, 2]),
    vec![0..1, 3..4],
);

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Converts a Vec<Bins<A>> into a Grid<A>, consuming the vector of bins.

The i-th element in Vec<Bins<A>> represents the projection of the bin grid onto the i-th axis.

Alternatively, a Grid can be built directly from data using a GridBuilder.

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Compare self to key and return true if they are equal.

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.