ArgMinMax
Efficient argmin & argmax (in 1 function) with SIMD (avx2) for
f32,f64,i16,i32,i64onndarray::ArrayView1
🚀 The function is generic over the type of the array, so it can be used on an ndarray::ArrayView1<T> where T can be f32, f64, i16, i32, i64.
👀 Note that this implementation contains no if checks, ensuring that the runtime of the function is independent of the input data its order (best-case = worst-case = average-case).
Installing
Add the following to your Cargo.toml:
[]
= "0.1.1"
Example usage
use ArgMinMax; // extension trait for ndarray::ArrayView1
use Array1;
let arr: = .collect;
let arr: = from;
let = arr.view.argminmax.unwrap; // apply extension
println!;
println!;
Benchmarks
Benchmarks on my laptop (AMD Ryzen 7 4800U, 1.8 GHz, 16GB RAM) using criterion show that the function is 3-20x faster than the scalar implementation (depending of data type).
See /benches/results.
Run the benchmarks yourself with the following command:
|
Acknowledgements
Some parts of this library are inspired by the great work of minimalrust's argmm project.