ndarray/
aliases.rs

1//! Type aliases for common array sizes
2//!
3
4use crate::dimension::Dim;
5use crate::{ArcArray, Array, ArrayView, ArrayViewMut, Ix, IxDynImpl};
6
7/// Create a zero-dimensional index
8#[allow(non_snake_case)]
9#[inline(always)]
10pub fn Ix0() -> Ix0 {
11    Dim::new([])
12}
13/// Create a one-dimensional index
14#[allow(non_snake_case)]
15#[inline(always)]
16pub fn Ix1(i0: Ix) -> Ix1 {
17    Dim::new([i0])
18}
19/// Create a two-dimensional index
20#[allow(non_snake_case)]
21#[inline(always)]
22pub fn Ix2(i0: Ix, i1: Ix) -> Ix2 {
23    Dim::new([i0, i1])
24}
25/// Create a three-dimensional index
26#[allow(non_snake_case)]
27#[inline(always)]
28pub fn Ix3(i0: Ix, i1: Ix, i2: Ix) -> Ix3 {
29    Dim::new([i0, i1, i2])
30}
31/// Create a four-dimensional index
32#[allow(non_snake_case)]
33#[inline(always)]
34pub fn Ix4(i0: Ix, i1: Ix, i2: Ix, i3: Ix) -> Ix4 {
35    Dim::new([i0, i1, i2, i3])
36}
37/// Create a five-dimensional index
38#[allow(non_snake_case)]
39#[inline(always)]
40pub fn Ix5(i0: Ix, i1: Ix, i2: Ix, i3: Ix, i4: Ix) -> Ix5 {
41    Dim::new([i0, i1, i2, i3, i4])
42}
43/// Create a six-dimensional index
44#[allow(non_snake_case)]
45#[inline(always)]
46pub fn Ix6(i0: Ix, i1: Ix, i2: Ix, i3: Ix, i4: Ix, i5: Ix) -> Ix6 {
47    Dim::new([i0, i1, i2, i3, i4, i5])
48}
49
50/// Create a dynamic-dimensional index
51#[allow(non_snake_case)]
52#[inline(always)]
53pub fn IxDyn(ix: &[Ix]) -> IxDyn {
54    Dim(ix)
55}
56
57/// zero-dimensionial
58pub type Ix0 = Dim<[Ix; 0]>;
59/// one-dimensional
60pub type Ix1 = Dim<[Ix; 1]>;
61/// two-dimensional
62pub type Ix2 = Dim<[Ix; 2]>;
63/// three-dimensional
64pub type Ix3 = Dim<[Ix; 3]>;
65/// four-dimensional
66pub type Ix4 = Dim<[Ix; 4]>;
67/// five-dimensional
68pub type Ix5 = Dim<[Ix; 5]>;
69/// six-dimensional
70pub type Ix6 = Dim<[Ix; 6]>;
71/// dynamic-dimensional
72///
73/// You can use the `IxDyn` function to create a dimension for an array with
74/// dynamic number of dimensions.  (`Vec<usize>` and `&[usize]` also implement
75/// `IntoDimension` to produce `IxDyn`).
76///
77/// ```
78/// use ndarray::ArrayD;
79/// use ndarray::IxDyn;
80///
81/// // Create a 5 × 6 × 3 × 4 array using the dynamic dimension type
82/// let mut a = ArrayD::<f64>::zeros(IxDyn(&[5, 6, 3, 4]));
83/// // Create a 1 × 3 × 4 array using the dynamic dimension type
84/// let mut b = ArrayD::<f64>::zeros(IxDyn(&[1, 3, 4]));
85///
86/// // We can use broadcasting to add arrays of compatible shapes together:
87/// a += &b;
88///
89/// // We can index into a, b using fixed size arrays:
90/// a[[0, 0, 0, 0]] = 0.;
91/// b[[0, 2, 3]] = a[[0, 0, 2, 3]];
92/// // Note: indexing will panic at runtime if the number of indices given does
93/// // not match the array.
94///
95/// // We can keep them in the same vector because both the arrays have
96/// // the same type `Array<f64, IxDyn>` a.k.a `ArrayD<f64>`:
97/// let arrays = vec![a, b];
98/// ```
99pub type IxDyn = Dim<IxDynImpl>;
100
101/// zero-dimensional array
102pub type Array0<A> = Array<A, Ix0>;
103/// one-dimensional array
104pub type Array1<A> = Array<A, Ix1>;
105/// two-dimensional array
106pub type Array2<A> = Array<A, Ix2>;
107/// three-dimensional array
108pub type Array3<A> = Array<A, Ix3>;
109/// four-dimensional array
110pub type Array4<A> = Array<A, Ix4>;
111/// five-dimensional array
112pub type Array5<A> = Array<A, Ix5>;
113/// six-dimensional array
114pub type Array6<A> = Array<A, Ix6>;
115/// dynamic-dimensional array
116pub type ArrayD<A> = Array<A, IxDyn>;
117
118/// zero-dimensional array view
119pub type ArrayView0<'a, A> = ArrayView<'a, A, Ix0>;
120/// one-dimensional array view
121pub type ArrayView1<'a, A> = ArrayView<'a, A, Ix1>;
122/// two-dimensional array view
123pub type ArrayView2<'a, A> = ArrayView<'a, A, Ix2>;
124/// three-dimensional array view
125pub type ArrayView3<'a, A> = ArrayView<'a, A, Ix3>;
126/// four-dimensional array view
127pub type ArrayView4<'a, A> = ArrayView<'a, A, Ix4>;
128/// five-dimensional array view
129pub type ArrayView5<'a, A> = ArrayView<'a, A, Ix5>;
130/// six-dimensional array view
131pub type ArrayView6<'a, A> = ArrayView<'a, A, Ix6>;
132/// dynamic-dimensional array view
133pub type ArrayViewD<'a, A> = ArrayView<'a, A, IxDyn>;
134
135/// zero-dimensional read-write array view
136pub type ArrayViewMut0<'a, A> = ArrayViewMut<'a, A, Ix0>;
137/// one-dimensional read-write array view
138pub type ArrayViewMut1<'a, A> = ArrayViewMut<'a, A, Ix1>;
139/// two-dimensional read-write array view
140pub type ArrayViewMut2<'a, A> = ArrayViewMut<'a, A, Ix2>;
141/// three-dimensional read-write array view
142pub type ArrayViewMut3<'a, A> = ArrayViewMut<'a, A, Ix3>;
143/// four-dimensional read-write array view
144pub type ArrayViewMut4<'a, A> = ArrayViewMut<'a, A, Ix4>;
145/// five-dimensional read-write array view
146pub type ArrayViewMut5<'a, A> = ArrayViewMut<'a, A, Ix5>;
147/// six-dimensional read-write array view
148pub type ArrayViewMut6<'a, A> = ArrayViewMut<'a, A, Ix6>;
149/// dynamic-dimensional read-write array view
150pub type ArrayViewMutD<'a, A> = ArrayViewMut<'a, A, IxDyn>;
151
152/// one-dimensional shared ownership array
153pub type ArcArray1<A> = ArcArray<A, Ix1>;
154/// two-dimensional shared ownership array
155pub type ArcArray2<A> = ArcArray<A, Ix2>;