pub struct View<'a, T, S: Shape = DynRank, L: Layout = Dense> { /* private fields */ }Expand description
Multidimensional array view.
Implementations§
Source§impl<'a, T, S: Shape, L: Layout> View<'a, T, S, L>
impl<'a, T, S: Shape, L: Layout> View<'a, T, S, L>
Sourcepub fn into_at(self, index: usize) -> View<'a, T, S::Tail, L>
pub fn into_at(self, index: usize) -> View<'a, T, S::Tail, L>
Converts the array view into a new array view indexing the first dimension.
§Panics
Panics if the index is out of bounds, or if the rank is not at least 1.
Sourcepub fn into_axis_at<A: Axis>(
self,
axis: A,
index: usize,
) -> View<'a, T, A::Remove<S>, Split<A, S, L>>
pub fn into_axis_at<A: Axis>( self, axis: A, index: usize, ) -> View<'a, T, A::Remove<S>, Split<A, S, L>>
Converts the array view into a new array view indexing the specified dimension.
If the dimension to be indexed is know at compile time, the resulting array shape will maintain constant-sized dimensions. Furthermore, if it is the first dimension the resulting array view has the same layout as the input.
§Panics
Panics if the dimension or the index is out of bounds.
Sourcepub fn into_col(self, index: usize) -> View<'a, T, (S::Head,), Strided>
pub fn into_col(self, index: usize) -> View<'a, T, (S::Head,), Strided>
Converts the array view into a new array view for the specified column.
§Panics
Panics if the rank is not equal to 2, or if the index is out of bounds.
Sourcepub fn into_diag(self, index: isize) -> View<'a, T, (Dyn,), Strided>
pub fn into_diag(self, index: isize) -> View<'a, T, (Dyn,), Strided>
Converts the array view into a new array view for the given diagonal,
where index > 0 is above and index < 0 is below the main diagonal.
§Panics
Panics if the rank is not equal to 2, or if the absolute index is larger than the number of columns or rows.
Sourcepub fn into_dyn(self) -> View<'a, T, DynRank, L>
pub fn into_dyn(self) -> View<'a, T, DynRank, L>
Converts the array view into an array view with dynamic rank.
Sourcepub fn into_flat(self) -> View<'a, T, (Dyn,), L>
pub fn into_flat(self) -> View<'a, T, (Dyn,), L>
Converts the array view into a one-dimensional array view.
§Panics
Panics if the array layout is not uniformly strided.
Sourcepub fn into_mapping<R: Shape, K: Layout>(self) -> View<'a, T, R, K>
pub fn into_mapping<R: Shape, K: Layout>(self) -> View<'a, T, R, K>
Converts the array view into a remapped array view.
§Panics
Panics if the shape is not matching static rank or constant-sized dimensions, or if the memory layout is not compatible with the new array layout.
Sourcepub fn into_permuted<I: IntoShape<IntoShape: Permutation>>(
self,
perm: I,
) -> View<'a, T, <I::IntoShape as Permutation>::Shape<S>, <I::IntoShape as Permutation>::Layout<L>>
pub fn into_permuted<I: IntoShape<IntoShape: Permutation>>( self, perm: I, ) -> View<'a, T, <I::IntoShape as Permutation>::Shape<S>, <I::IntoShape as Permutation>::Layout<L>>
Converts the array view into a new array view with the dimensions permuted.
If the permutation is an identity permutation and known at compile time, the
resulting array view has the same layout as the input. For example, permuting
with (Const::<0>, Const::<1>) will maintain the layout while permuting with
[0, 1] gives strided layout.
§Panics
Panics if the permutation is not valid.
Sourcepub fn into_reordered(
self,
) -> View<'a, T, S::Reverse, <S::Tail as Shape>::Layout<L>>
👎Deprecated
pub fn into_reordered( self, ) -> View<'a, T, S::Reverse, <S::Tail as Shape>::Layout<L>>
Converts the array view into a reordered array view.
This method is deprecated, use into_transposed instead.
Sourcepub fn into_row(
self,
index: usize,
) -> View<'a, T, (<S::Tail as Shape>::Head,), L>
pub fn into_row( self, index: usize, ) -> View<'a, T, (<S::Tail as Shape>::Head,), L>
Converts the array view into a new array view for the specified row.
§Panics
Panics if the rank is not equal to 2, or if the index is out of bounds.
Sourcepub fn into_shape<I: IntoShape>(self, shape: I) -> View<'a, T, I::IntoShape, L>
pub fn into_shape<I: IntoShape>(self, shape: I) -> View<'a, T, I::IntoShape, L>
Converts the array view into a reshaped array view.
At most one dimension can have dynamic size usize::MAX, and is then inferred
from the other dimensions and the array length.
§Examples
use mdarray::view;
let v = view![[1, 2, 3], [4, 5, 6]];
assert_eq!(v.into_shape([!0, 2]), view![[1, 2], [3, 4], [5, 6]]);§Panics
Panics if the array length is changed, or if the memory layout is not compatible.
Sourcepub fn into_split_at(
self,
mid: usize,
) -> (View<'a, T, Resize<Const<0>, S>, L>, View<'a, T, Resize<Const<0>, S>, L>)
pub fn into_split_at( self, mid: usize, ) -> (View<'a, T, Resize<Const<0>, S>, L>, View<'a, T, Resize<Const<0>, S>, L>)
Divides the array view into two at an index along the first dimension.
§Panics
Panics if the split point is larger than the number of elements in that dimension, or if the rank is not at least 1.
Sourcepub fn into_split_axis_at<A: Axis>(
self,
axis: A,
mid: usize,
) -> (View<'a, T, Resize<A, S>, Split<A, S, L>>, View<'a, T, Resize<A, S>, Split<A, S, L>>)
pub fn into_split_axis_at<A: Axis>( self, axis: A, mid: usize, ) -> (View<'a, T, Resize<A, S>, Split<A, S, L>>, View<'a, T, Resize<A, S>, Split<A, S, L>>)
Divides the array view into two at an index along the specified dimension.
If the dimension to be divided is know at compile time, the resulting array shape will maintain constant-sized dimensions. Furthermore, if it is the first dimension the resulting array views have the same layout as the input.
§Panics
Panics if the split point is larger than the number of elements in that dimension, or if the dimension is out of bounds.
Sourcepub fn into_transposed(
self,
) -> View<'a, T, S::Reverse, <S::Tail as Shape>::Layout<L>>
pub fn into_transposed( self, ) -> View<'a, T, S::Reverse, <S::Tail as Shape>::Layout<L>>
Converts the array view into a transposed array view, where the dimensions are reversed.
Sourcepub unsafe fn new_unchecked(ptr: *const T, mapping: L::Mapping<S>) -> Self
pub unsafe fn new_unchecked(ptr: *const T, mapping: L::Mapping<S>) -> Self
Creates an array view from a raw pointer and layout.
§Safety
The pointer must be non-null and a valid array view for the given layout.
Source§impl<'a, T, X: Dim, Y: Dim, Z: Dim, L: Layout> View<'a, T, (X, Y, Z), L>
impl<'a, T, X: Dim, Y: Dim, Z: Dim, L: Layout> View<'a, T, (X, Y, Z), L>
Sourcepub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex>(
self,
a: A,
b: B,
c: C,
) -> View<'a, T, <(A, B, C) as ViewIndex>::Shape<(X, Y, Z)>, <(A, B, C) as ViewIndex>::Layout<L>>
pub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex>( self, a: A, b: B, c: C, ) -> View<'a, T, <(A, B, C) as ViewIndex>::Shape<(X, Y, Z)>, <(A, B, C) as ViewIndex>::Layout<L>>
Converts the array view into a new array view for the specified subarray.
§Panics
Panics if the subarray is out of bounds.
Source§impl<'a, T, X: Dim, Y: Dim, Z: Dim, W: Dim, L: Layout> View<'a, T, (X, Y, Z, W), L>
impl<'a, T, X: Dim, Y: Dim, Z: Dim, W: Dim, L: Layout> View<'a, T, (X, Y, Z, W), L>
Sourcepub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex, D: DimIndex>(
self,
a: A,
b: B,
c: C,
d: D,
) -> View<'a, T, <(A, B, C, D) as ViewIndex>::Shape<(X, Y, Z, W)>, <(A, B, C, D) as ViewIndex>::Layout<L>>
pub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex, D: DimIndex>( self, a: A, b: B, c: C, d: D, ) -> View<'a, T, <(A, B, C, D) as ViewIndex>::Shape<(X, Y, Z, W)>, <(A, B, C, D) as ViewIndex>::Layout<L>>
Converts the array view into a new array view for the specified subarray.
§Panics
Panics if the subarray is out of bounds.
Source§impl<'a, T, X: Dim, Y: Dim, Z: Dim, W: Dim, U: Dim, L: Layout> View<'a, T, (X, Y, Z, W, U), L>
impl<'a, T, X: Dim, Y: Dim, Z: Dim, W: Dim, U: Dim, L: Layout> View<'a, T, (X, Y, Z, W, U), L>
Sourcepub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex, D: DimIndex, E: DimIndex>(
self,
a: A,
b: B,
c: C,
d: D,
e: E,
) -> View<'a, T, <(A, B, C, D, E) as ViewIndex>::Shape<(X, Y, Z, W, U)>, <(A, B, C, D, E) as ViewIndex>::Layout<L>>
pub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex, D: DimIndex, E: DimIndex>( self, a: A, b: B, c: C, d: D, e: E, ) -> View<'a, T, <(A, B, C, D, E) as ViewIndex>::Shape<(X, Y, Z, W, U)>, <(A, B, C, D, E) as ViewIndex>::Layout<L>>
Converts the array view into a new array view for the specified subarray.
§Panics
Panics if the subarray is out of bounds.
Source§impl<'a, T, X: Dim, Y: Dim, Z: Dim, W: Dim, U: Dim, V: Dim, L: Layout> View<'a, T, (X, Y, Z, W, U, V), L>
impl<'a, T, X: Dim, Y: Dim, Z: Dim, W: Dim, U: Dim, V: Dim, L: Layout> View<'a, T, (X, Y, Z, W, U, V), L>
Sourcepub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex, D: DimIndex, E: DimIndex, F: DimIndex>(
self,
a: A,
b: B,
c: C,
d: D,
e: E,
f: F,
) -> View<'a, T, <(A, B, C, D, E, F) as ViewIndex>::Shape<(X, Y, Z, W, U, V)>, <(A, B, C, D, E, F) as ViewIndex>::Layout<L>>
pub fn into_view<A: DimIndex, B: DimIndex, C: DimIndex, D: DimIndex, E: DimIndex, F: DimIndex>( self, a: A, b: B, c: C, d: D, e: E, f: F, ) -> View<'a, T, <(A, B, C, D, E, F) as ViewIndex>::Shape<(X, Y, Z, W, U, V)>, <(A, B, C, D, E, F) as ViewIndex>::Layout<L>>
Converts the array view into a new array view for the specified subarray.
§Panics
Panics if the subarray is out of bounds.
Methods from Deref<Target = Slice<T, S, L>>§
Sourcepub fn at(&self, index: usize) -> View<'_, T, S::Tail, L>
pub fn at(&self, index: usize) -> View<'_, T, S::Tail, L>
Returns an array view after indexing the first dimension.
§Panics
Panics if the index is out of bounds, or if the rank is not at least 1.
Sourcepub fn axis_at<A: Axis>(
&self,
axis: A,
index: usize,
) -> View<'_, T, A::Remove<S>, Split<A, S, L>>
pub fn axis_at<A: Axis>( &self, axis: A, index: usize, ) -> View<'_, T, A::Remove<S>, Split<A, S, L>>
Returns an array view after indexing the specified dimension.
If the dimension to be indexed is know at compile time, the resulting array shape will maintain constant-sized dimensions. Furthermore, if it is the first dimension the resulting array view has the same layout as the input.
§Panics
Panics if the dimension or the index is out of bounds.
Sourcepub fn axis_expr<A: Axis>(&self, axis: A) -> AxisExpr<'_, T, S, L, A>
pub fn axis_expr<A: Axis>(&self, axis: A) -> AxisExpr<'_, T, S, L, A>
Returns an expression that gives array views iterating over the specified dimension.
If the dimension to be iterated over is know at compile time, the resulting array shape will maintain constant-sized dimensions. Furthermore, if it is the first dimension the resulting array views have the same layout as the input.
§Panics
Panics if the dimension is out of bounds.
Sourcepub fn col(&self, index: usize) -> View<'_, T, (S::Head,), Strided>
pub fn col(&self, index: usize) -> View<'_, T, (S::Head,), Strided>
Returns an array view for the specified column.
§Panics
Panics if the rank is not equal to 2, or if the index is out of bounds.
Sourcepub fn cols(&self) -> Lanes<'_, T, S, L, Cols>
pub fn cols(&self) -> Lanes<'_, T, S, L, Cols>
Returns an expression that gives column views iterating over the other dimensions.
§Panics
Panics if the rank is not at least 2.
Sourcepub fn contains(&self, x: &T) -> boolwhere
T: PartialEq,
pub fn contains(&self, x: &T) -> boolwhere
T: PartialEq,
Returns true if the array slice contains an element with the given value.
Sourcepub fn diag(&self, index: isize) -> View<'_, T, (Dyn,), Strided>
pub fn diag(&self, index: isize) -> View<'_, T, (Dyn,), Strided>
Returns an array view for the given diagonal of the array slice,
where index > 0 is above and index < 0 is below the main diagonal.
§Panics
Panics if the rank is not equal to 2, or if the absolute index is larger than the number of columns or rows.
Sourcepub fn dim(&self, index: usize) -> usize
pub fn dim(&self, index: usize) -> usize
Returns the number of elements in the specified dimension.
§Panics
Panics if the dimension is out of bounds.
Sourcepub fn flatten(&self) -> View<'_, T, (Dyn,), L>
pub fn flatten(&self) -> View<'_, T, (Dyn,), L>
Returns a one-dimensional array view of the array slice.
§Panics
Panics if the array layout is not uniformly strided.
Sourcepub unsafe fn get_unchecked<I: SliceIndex<T, S, L>>(
&self,
index: I,
) -> &I::Output
pub unsafe fn get_unchecked<I: SliceIndex<T, S, L>>( &self, index: I, ) -> &I::Output
Returns a reference to an element or a subslice, without doing bounds checking.
§Safety
The index must be within bounds of the array slice.
Sourcepub fn is_contiguous(&self) -> bool
pub fn is_contiguous(&self) -> bool
Returns true if the array strides are consistent with contiguous memory layout.
Sourcepub fn lanes<A: Axis>(&self, axis: A) -> Lanes<'_, T, S, L, A>
pub fn lanes<A: Axis>(&self, axis: A) -> Lanes<'_, T, S, L, A>
Returns an expression that gives array views over the specified dimension, iterating over the other dimensions.
If the dimension to give array views over is know at compile time, the resulting shape will maintain a constant-sized dimension. Furthermore, if it is the last dimension the resulting array views have the same layout as the input.
§Panics
Panics if the dimension is out of bounds.
Sourcepub fn outer_expr(&self) -> AxisExpr<'_, T, S, L, Const<0>>
pub fn outer_expr(&self) -> AxisExpr<'_, T, S, L, Const<0>>
Returns an expression that gives array views iterating over the first dimension.
Iterating over the first dimension results in array views with the same layout as the input.
§Panics
Panics if the rank is not at least 1.
Sourcepub fn permute<I: IntoShape<IntoShape: Permutation>>(
&self,
perm: I,
) -> View<'_, T, <I::IntoShape as Permutation>::Shape<S>, <I::IntoShape as Permutation>::Layout<L>>
pub fn permute<I: IntoShape<IntoShape: Permutation>>( &self, perm: I, ) -> View<'_, T, <I::IntoShape as Permutation>::Shape<S>, <I::IntoShape as Permutation>::Layout<L>>
Returns an array view with the dimensions permuted.
If the permutation is an identity permutation and known at compile time, the
resulting array view has the same layout as the input. For example, permuting
with (Const::<0>, Const::<1>) will maintain the layout while permuting with
[0, 1] gives strided layout.
§Panics
Panics if the permutation is not valid.
Sourcepub fn remap<R: Shape, K: Layout>(&self) -> View<'_, T, R, K>
pub fn remap<R: Shape, K: Layout>(&self) -> View<'_, T, R, K>
Returns a remapped array view of the array slice.
§Panics
Panics if the memory layout is not compatible with the new array layout.
Sourcepub fn reorder(&self) -> View<'_, T, S::Reverse, <S::Tail as Shape>::Layout<L>>
👎Deprecated
pub fn reorder(&self) -> View<'_, T, S::Reverse, <S::Tail as Shape>::Layout<L>>
Returns a reordered array view of the array slice.
This method is deprecated, use transpose instead.
Sourcepub fn reshape<I: IntoShape>(&self, shape: I) -> View<'_, T, I::IntoShape, L>
pub fn reshape<I: IntoShape>(&self, shape: I) -> View<'_, T, I::IntoShape, L>
Returns a reshaped array view of the array slice.
At most one dimension can have dynamic size usize::MAX, and is then inferred
from the other dimensions and the array length.
§Examples
use mdarray::view;
let v = view![[1, 2, 3], [4, 5, 6]];
assert_eq!(v.reshape([!0, 2]), view![[1, 2], [3, 4], [5, 6]]);§Panics
Panics if the array length is changed, or if the memory layout is not compatible.
Sourcepub fn row(&self, index: usize) -> View<'_, T, (<S::Tail as Shape>::Head,), L>
pub fn row(&self, index: usize) -> View<'_, T, (<S::Tail as Shape>::Head,), L>
Returns an array view for the specified row.
§Panics
Panics if the rank is not equal to 2, or if the index is out of bounds.
Sourcepub fn rows(&self) -> Lanes<'_, T, S, L, Rows>
pub fn rows(&self) -> Lanes<'_, T, S, L, Rows>
Returns an expression that gives row views iterating over the other dimensions.
§Panics
Panics if the rank is not at least 1.
Sourcepub fn split_at(
&self,
mid: usize,
) -> (View<'_, T, Resize<Const<0>, S>, L>, View<'_, T, Resize<Const<0>, S>, L>)
pub fn split_at( &self, mid: usize, ) -> (View<'_, T, Resize<Const<0>, S>, L>, View<'_, T, Resize<Const<0>, S>, L>)
Divides an array slice into two at an index along the first dimension.
§Panics
Panics if the split point is larger than the number of elements in that dimension, or if the rank is not at least 1.
Sourcepub fn split_axis_at<A: Axis>(
&self,
axis: A,
mid: usize,
) -> (View<'_, T, Resize<A, S>, Split<A, S, L>>, View<'_, T, Resize<A, S>, Split<A, S, L>>)
pub fn split_axis_at<A: Axis>( &self, axis: A, mid: usize, ) -> (View<'_, T, Resize<A, S>, Split<A, S, L>>, View<'_, T, Resize<A, S>, Split<A, S, L>>)
Divides an array slice into two at an index along the specified dimension.
If the dimension to be divided is know at compile time, the resulting array shape will maintain constant-sized dimensions. Furthermore, if it is the first dimension the resulting array views have the same layout as the input.
§Panics
Panics if the split point is larger than the number of elements in that dimension, or if the dimension is out of bounds.
Sourcepub fn stride(&self, index: usize) -> isize
pub fn stride(&self, index: usize) -> isize
Returns the distance between elements in the specified dimension.
§Panics
Panics if the dimension is out of bounds.
Sourcepub fn to_array(&self) -> Array<T, S>where
T: Clone,
S: ConstShape,
pub fn to_array(&self) -> Array<T, S>where
T: Clone,
S: ConstShape,
Copies the array slice into a new array.