use std::time::Instant;
use ndarray::{Array1, Array3, ShapeBuilder};
use ndarray_ndimage::{pad, PadMode};
fn main() {
println!("C order");
let data_c = (0..200 * 200 * 200)
.map(|v| v as u32)
.collect::<Array1<_>>()
.into_shape((200, 200, 200))
.unwrap();
test(&data_c);
println!("\nF order");
let mut data_f = Array3::zeros((200, 200, 200).f());
data_f.assign(&data_c);
test(&data_f);
}
fn test(data: &Array3<u32>) {
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Constant(0));
let elapsed = now.elapsed();
println!(
"Constant 0 {}s {}ms {}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded[(0, 0, 0)]
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Constant(1));
let elapsed = now.elapsed();
println!(
"Constant 1 {}s {}ms {}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded[(0, 0, 0)]
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Edge);
let elapsed = now.elapsed();
println!(
"Edge {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Maximum);
let elapsed = now.elapsed();
println!(
"Maximum {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Mean);
let elapsed = now.elapsed();
println!(
"Mean {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Median);
let elapsed = now.elapsed();
println!(
"Median {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Minimum);
let elapsed = now.elapsed();
println!(
"Minimum {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Reflect);
let elapsed = now.elapsed();
println!(
"Reflect {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Symmetric);
let elapsed = now.elapsed();
println!(
"Symmetric {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
let now = Instant::now();
let padded = pad(&data, &[(1, 1)], PadMode::Wrap);
let elapsed = now.elapsed();
println!(
"Wrap {}s {}ms {:?}",
elapsed.as_secs(),
elapsed.subsec_millis(),
padded.dim()
);
}