|
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