logo
macro_rules! par_azip {
    ($($t:tt)*) => { ... };
}
Expand description

Parallelized array zip macro: lock step function application across several arrays and producers.

This is a version of the azip macro that requires the crate feature rayon to be enabled.

See the azip macro for more details about the macro syntax!

This example:

par_azip!((a in &mut a, &b in &b, &c in &c) { *a = b + c })

Is equivalent to:

Zip::from(&mut a).and(&b).and(&c).par_for_each(|a, &b, &c| {
    *a = b + c;
});

Panics if any of the arrays are not of the same shape.

Examples

use ndarray::Array2;
use ndarray::parallel::par_azip;

type M = Array2<f32>;

let mut a = M::zeros((16, 16));
let b = M::from_elem(a.dim(), 1.);
let c = M::from_elem(a.dim(), 2.);

// Compute a simple ternary operation:
// elementwise addition of b and c, stored in a

par_azip!((a in &mut a, &b in &b, &c in &c) *a = b + c);

assert_eq!(a, &b + &c);