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