|
1 | 1 | use self::interpolate::{higher_index, lower_index, Interpolate};
|
2 | 2 | use super::sort::get_many_from_sorted_mut_unchecked;
|
3 |
| -use indexmap::IndexSet; |
4 | 3 | use ndarray::prelude::*;
|
5 | 4 | use ndarray::{Data, DataMut, RemoveAxis, Zip};
|
6 | 5 | use noisy_float::types::N64;
|
@@ -465,23 +464,17 @@ where
|
465 | 464 | return Some(Array::from_shape_vec(results_shape, Vec::new()).unwrap());
|
466 | 465 | }
|
467 | 466 |
|
468 |
| - let mut deduped_qs: Vec<N64> = qs.to_vec(); |
469 |
| - deduped_qs.sort_by(|a, b| a.partial_cmp(b).unwrap()); |
470 |
| - deduped_qs.dedup(); |
471 |
| - |
472 |
| - // IndexSet preserves insertion order: |
473 |
| - // - indexes will stay sorted; |
474 |
| - // - we avoid index duplication. |
475 |
| - let mut searched_indexes = IndexSet::new(); |
476 |
| - for q in deduped_qs.iter() { |
477 |
| - if I::needs_lower(*q, axis_len) { |
478 |
| - searched_indexes.insert(lower_index(*q, axis_len)); |
| 467 | + let mut searched_indexes = Vec::with_capacity(2 * qs.len()); |
| 468 | + for &q in &qs { |
| 469 | + if I::needs_lower(q, axis_len) { |
| 470 | + searched_indexes.push(lower_index(q, axis_len)); |
479 | 471 | }
|
480 |
| - if I::needs_higher(*q, axis_len) { |
481 |
| - searched_indexes.insert(higher_index(*q, axis_len)); |
| 472 | + if I::needs_higher(q, axis_len) { |
| 473 | + searched_indexes.push(higher_index(q, axis_len)); |
482 | 474 | }
|
483 | 475 | }
|
484 |
| - let searched_indexes: Vec<usize> = searched_indexes.into_iter().collect(); |
| 476 | + searched_indexes.sort(); |
| 477 | + searched_indexes.dedup(); |
485 | 478 |
|
486 | 479 | let mut results = Array::from_elem(results_shape, data.first().unwrap().clone());
|
487 | 480 | Zip::from(results.lanes_mut(axis))
|
|
0 commit comments