[−][src]Type Definition ndarray::ArrayView
type ArrayView<'a, A, D> = ArrayBase<ViewRepr<&'a A>, D>;
A read-only array view.
An array view represents an array or a part of it, created from an iterator, subview or slice of an array.
The ArrayView<'a, A, D>
is parameterized by 'a
for the scope of the
borrow, A
for the element type and D
for the dimensionality.
Array views have all the methods of an array (see ArrayBase
).
See also ArrayViewMut
.
Methods
impl<'a, A, D> ArrayView<'a, A, D> where
D: Dimension,
[src][−]
D: Dimension,
Methods for read-only array views.
pub fn from_shape<Sh>(shape: Sh, xs: &'a [A]) -> Result<Self, ShapeError> where
Sh: Into<StrideShape<D>>,
[src][−]
Sh: Into<StrideShape<D>>,
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]);
pub unsafe fn from_shape_ptr<Sh>(shape: Sh, ptr: *const A) -> Self where
Sh: Into<StrideShape<D>>,
[src][−]
Sh: Into<StrideShape<D>>,
Create an ArrayView<A, D>
from shape information and a raw pointer to
the elements.
Safety
The caller is responsible for ensuring all of the following:
-
The elements seen by moving
ptr
according to the shape and strides must live at least as long as'a
and must not be not mutably aliased for the duration of'a
. -
ptr
must be non-null and aligned, and it must be safe to.offset()
ptr
by zero. -
It must be safe to
.offset()
the pointer repeatedly along all axes and calculate thecount
s for the.offset()
calls without overflow, even if the array is empty or the elements are zero-sized.In other words,
-
All possible pointers generated by moving along all axes must be in bounds or one byte past the end of a single allocation with element type
A
. The only exceptions are if the array is empty or the element type is zero-sized. In these cases,ptr
may be dangling, but it must still be safe to.offset()
the pointer along the axes. -
The offset in units of bytes between the least address and greatest address by moving along all axes must not exceed
isize::MAX
. This constraint prevents the computed offset, in bytes, from overflowingisize
regardless of the starting point due to past offsets. -
The offset in units of
A
between the least address and greatest address by moving along all axes must not exceedisize::MAX
. This constraint prevents overflow when calculating thecount
parameter to.offset()
regardless of the starting point due to past offsets.
-
-
The product of non-zero axis lengths must not exceed
isize::MAX
.
impl<'a, A, D> ArrayView<'a, A, D> where
D: Dimension,
[src][−]
D: Dimension,
Methods for read-only array views.
pub fn reborrow<'b>(self) -> ArrayView<'b, A, D> where
'a: 'b,
[src][−]
'a: 'b,
Convert the view into an ArrayView<'b, A, D>
where 'b
is a lifetime
outlived by 'a'
.
pub fn into_slice(&self) -> Option<&'a [A]>
[src][−]
into_slice
has been renamed to to_slice
Return the array’s data as a slice, if it is contiguous and in standard order.
Return None
otherwise.
pub fn to_slice(&self) -> Option<&'a [A]>
[src][−]
Return the array’s data as a slice, if it is contiguous and in standard order.
Return None
otherwise.
impl<'a, A> ArrayView<'a, A, Ix0>
[src][−]
pub fn into_scalar(self) -> &'a A
[src][−]
Consume the view and return a reference to the single element in the array.
The lifetime of the returned reference matches the lifetime of the data the array view was pointing to.
use ndarray::{arr0, Array0}; // `Foo` doesn't implement `Clone`. #[derive(Debug, Eq, PartialEq)] struct Foo; let array: Array0<Foo> = arr0(Foo); let view = array.view(); let scalar: &Foo = view.into_scalar(); assert_eq!(scalar, &Foo);
impl<'a, A, D> ArrayView<'a, A, D> where
D: Dimension,
[src][−]
D: Dimension,
Methods for read-only array views.
pub fn split_at(self, axis: Axis, index: Ix) -> (Self, Self)
[src][−]
Split the array view 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.
Examples:
let a = aview2(&[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 0, 1]]);
The array view a
has two axes and shape 3 × 4:
──▶ Axis(1)
┌─────┬─────┬─────┬─────┐ 0
│ │ a₀₀ │ a₀₁ │ a₀₂ │ a₀₃ │
▼ ├─────┼─────┼─────┼─────┤ 1
Axis(0)│ a₁₀ │ a₁₁ │ a₁₂ │ a₁₃ │
├─────┼─────┼─────┼─────┤ 2
│ a₂₀ │ a₂₁ │ a₂₂ │ a₂₃ │
└─────┴─────┴─────┴─────┘ 3 ↑
0 1 2 3 4 ← possible split_at indices.
Row indices increase along Axis(0)
, and column indices increase along
Axis(1)
. Note that we split “before” an element index, and that
both 0 and the endpoint are valid split indices.
Example 1: Split a
along the first axis, in this case the rows, at
index 2.
This produces views v1 and v2 of shapes 2 × 4 and 1 × 4:
let (v1, v2) = a.split_at(Axis(0), 1);
┌─────┬─────┬─────┬─────┐ 0 ↓ indices
│ a₀₀ │ a₀₁ │ a₀₂ │ a₀₃ │ along Axis(0)
├─────┼─────┼─────┼─────┤ v1 1
│ a₁₀ │ a₁₁ │ a₁₂ │ a₁₃ │
└─────┴─────┴─────┴─────┘
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2
┌─────┬─────┬─────┬─────┐
│ a₂₀ │ a₂₁ │ a₂₂ │ a₂₃ │ v2
└─────┴─────┴─────┴─────┘ 3
Example 2: Split a
along the second axis, in this case the
columns, at index 2.
This produces views u1 and u2 of shapes 3 × 2 and 3 × 2:
let (u1, u2) = a.split_at(Axis(1), 2);
u1 u2
┌─────┬─────┐┊┌─────┬─────┐
│ a₀₀ │ a₀₁ │┊│ a₀₂ │ a₀₃ │
├─────┼─────┤┊├─────┼─────┤
│ a₁₀ │ a₁₁ │┊│ a₁₂ │ a₁₃ │
├─────┼─────┤┊├─────┼─────┤
│ a₂₀ │ a₂₁ │┊│ a₂₂ │ a₂₃ │
└─────┴─────┘┊└─────┴─────┘
0 1 2 3 4 indices →
along Axis(1)
Trait Implementations
impl<'a, A, S, D> From<&'a ArrayBase<S, D>> for ArrayView<'a, A, D> where
S: Data<Elem = A>,
D: Dimension,
[src][+]
S: Data<Elem = A>,
D: Dimension,
impl<'a, A, Slice: ?Sized> From<&'a Slice> for ArrayView<'a, A, Ix1> where
Slice: AsRef<[A]>,
[src][+]
Slice: AsRef<[A]>,
impl<'a, 'b, I, A, D> IndexLonger<I> for &'b ArrayView<'a, A, D> where
I: NdIndex<D>,
D: Dimension,
[src][+]
I: NdIndex<D>,
D: Dimension,
impl<'a, A, D> IntoIterator for ArrayView<'a, A, D> where
D: Dimension,
[src][+]
D: Dimension,