1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
// Copyright 2014-2016 bluss and ndarray developers.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//! Methods for two-dimensional arrays.
use crate::imp_prelude::*;
/// # Methods For 2-D Arrays
impl<A, S> ArrayBase<S, Ix2>
where
S: RawData<Elem = A>,
{
/// Return an array view of row `index`.
///
/// **Panics** if `index` is out of bounds.
///
/// ```
/// use ndarray::array;
/// let array = array![[1., 2.], [3., 4.]];
/// assert_eq!(array.row(0), array![1., 2.]);
/// ```
pub fn row(&self, index: Ix) -> ArrayView1<'_, A>
where
S: Data,
{
self.index_axis(Axis(0), index)
}
/// Return a mutable array view of row `index`.
///
/// **Panics** if `index` is out of bounds.
///
/// ```
/// use ndarray::array;
/// let mut array = array![[1., 2.], [3., 4.]];
/// array.row_mut(0)[1] = 5.;
/// assert_eq!(array, array![[1., 5.], [3., 4.]]);
/// ```
pub fn row_mut(&mut self, index: Ix) -> ArrayViewMut1<'_, A>
where
S: DataMut,
{
self.index_axis_mut(Axis(0), index)
}
/// Return the number of rows (length of `Axis(0)`) in the two-dimensional array.
///
/// ```
/// use ndarray::{array, Axis};
///
/// let array = array![[1., 2.],
/// [3., 4.],
/// [5., 6.]];
/// assert_eq!(array.nrows(), 3);
///
/// // equivalent ways of getting the dimensions
/// // get nrows, ncols by using dim:
/// let (m, n) = array.dim();
/// assert_eq!(m, array.nrows());
/// // get length of any particular axis with .len_of()
/// assert_eq!(m, array.len_of(Axis(0)));
/// ```
pub fn nrows(&self) -> usize {
self.len_of(Axis(0))
}
/// Return an array view of column `index`.
///
/// **Panics** if `index` is out of bounds.
///
/// ```
/// use ndarray::array;
/// let array = array![[1., 2.], [3., 4.]];
/// assert_eq!(array.column(0), array![1., 3.]);
/// ```
pub fn column(&self, index: Ix) -> ArrayView1<'_, A>
where
S: Data,
{
self.index_axis(Axis(1), index)
}
/// Return a mutable array view of column `index`.
///
/// **Panics** if `index` is out of bounds.
///
/// ```
/// use ndarray::array;
/// let mut array = array![[1., 2.], [3., 4.]];
/// array.column_mut(0)[1] = 5.;
/// assert_eq!(array, array![[1., 2.], [5., 4.]]);
/// ```
pub fn column_mut(&mut self, index: Ix) -> ArrayViewMut1<'_, A>
where
S: DataMut,
{
self.index_axis_mut(Axis(1), index)
}
/// Return the number of columns (length of `Axis(1)`) in the two-dimensional array.
///
/// ```
/// use ndarray::{array, Axis};
///
/// let array = array![[1., 2.],
/// [3., 4.],
/// [5., 6.]];
/// assert_eq!(array.ncols(), 2);
///
/// // equivalent ways of getting the dimensions
/// // get nrows, ncols by using dim:
/// let (m, n) = array.dim();
/// assert_eq!(n, array.ncols());
/// // get length of any particular axis with .len_of()
/// assert_eq!(n, array.len_of(Axis(1)));
/// ```
pub fn ncols(&self) -> usize {
self.len_of(Axis(1))
}
/// Return true if the array is square, false otherwise.
///
/// # Examples
/// Square:
/// ```
/// use ndarray::array;
/// let array = array![[1., 2.], [3., 4.]];
/// assert!(array.is_square());
/// ```
/// Not square:
/// ```
/// use ndarray::array;
/// let array = array![[1., 2., 5.], [3., 4., 6.]];
/// assert!(!array.is_square());
/// ```
pub fn is_square(&self) -> bool {
let (m, n) = self.dim();
m == n
}
}