block_diag

Function block_diag 

Source
pub fn block_diag<'a, T>(
    arrays: &[&'a dyn SparseArray<T>],
    format: &str,
) -> SparseResult<Box<dyn SparseArray<T>>>
where T: 'a + Float + Add<Output = T> + Sub<Output = T> + Mul<Output = T> + Div<Output = T> + Debug + Copy + 'static,
Expand description

Create a block diagonal sparse array from input arrays

§Arguments

  • arrays - A slice of sparse arrays to use as diagonal blocks
  • format - Format of the output array (“csr” or “coo”)

§Returns

A sparse array with the input arrays arranged as diagonal blocks

§Examples

use scirs2_sparse::construct::eye_array;
use scirs2_sparse::combine::block_diag;

let a: Box<dyn scirs2_sparse::SparseArray<f64>> = eye_array(2, "csr").unwrap();
let b: Box<dyn scirs2_sparse::SparseArray<f64>> = eye_array(3, "csr").unwrap();
let c = block_diag(&[&*a, &*b], "csr").unwrap();

assert_eq!(c.shape(), (5, 5));
// First block (2x2 identity)
assert_eq!(c.get(0, 0), 1.0);
assert_eq!(c.get(1, 1), 1.0);
// Second block (3x3 identity), starts at (2,2)
assert_eq!(c.get(2, 2), 1.0);
assert_eq!(c.get(3, 3), 1.0);
assert_eq!(c.get(4, 4), 1.0);
// Off-block elements are zero
assert_eq!(c.get(0, 2), 0.0);
assert_eq!(c.get(2, 0), 0.0);