pub fn diagonal<T>(
array: ArrayView<'_, T, Ix2>,
offset: isize,
) -> Result<Array<T, Ix1>, &'static str>
Expand description
Extract a diagonal or a sub-diagonal from a 2D array
§Arguments
array
- The input 2D arrayoffset
- Offset from the main diagonal (0 for main diagonal, positive for above, negative for below)
§Returns
A 1D array containing the diagonal elements
§Examples
use ndarray::array;
use scirs2_core::ndarray_ext::indexing::diagonal;
let a = array![[1, 2, 3], [4, 5, 6], [7, 8, 9]];
// Main diagonal
let main_diag = diagonal(a.view(), 0).unwrap();
assert_eq!(main_diag.len(), 3);
assert_eq!(main_diag[0], 1);
assert_eq!(main_diag[1], 5);
assert_eq!(main_diag[2], 9);
// Upper diagonal
let upper_diag = diagonal(a.view(), 1).unwrap();
assert_eq!(upper_diag.len(), 2);
assert_eq!(upper_diag[0], 2);
assert_eq!(upper_diag[1], 6);
// Lower diagonal
let lower_diag = diagonal(a.view(), -1).unwrap();
assert_eq!(lower_diag.len(), 2);
assert_eq!(lower_diag[0], 4);
assert_eq!(lower_diag[1], 8);