From 763aaab5600fe7f4f3221dff6cfb308a65ffd499 Mon Sep 17 00:00:00 2001 From: Dacheng Xu Date: Wed, 27 Nov 2024 16:18:04 -0500 Subject: [PATCH] Use stable sorting of `numpy.argsort` (#64) --- rframe/indexes/interpolating_index.py | 2 +- rframe/interfaces/json.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rframe/indexes/interpolating_index.py b/rframe/indexes/interpolating_index.py index f449dd6..8d4cae8 100644 --- a/rframe/indexes/interpolating_index.py +++ b/rframe/indexes/interpolating_index.py @@ -23,7 +23,7 @@ def interpolater(x, xs, ys, kind="linear"): @interpolater.register(int) def interpolate_number(x, xs, ys, kind="linear"): if isinstance(ys[0], (float, int)): - sort = np.argsort(xs) + sort = np.argsort(xs, kind="mergesort") xs = np.array(xs)[sort] ys = np.array(ys)[sort] return np.interp(x, xs, ys) diff --git a/rframe/interfaces/json.py b/rframe/interfaces/json.py index 0639a68..f324d33 100644 --- a/rframe/interfaces/json.py +++ b/rframe/interfaces/json.py @@ -178,11 +178,11 @@ def _apply_selection(self, records, label, limit=1): after_mask = field_values > label after_values = field_values[after_mask] - before_idxs = np.argsort(np.abs(before_values) - label)[:limit] + before_idxs = np.argsort(np.abs(before_values) - label, kind="mergesort")[:limit] before_records = [records[i] for i in np.flatnonzero(before_mask)] before_values = [before_records[i] for i in before_idxs] - after_idxs = np.argsort(np.abs(after_values) - label)[:limit] + after_idxs = np.argsort(np.abs(after_values) - label, kind="mergesort")[:limit] after_records = [records[i] for i in np.flatnonzero(after_mask)] after_values = [after_records[i] for i in after_idxs] return before_values + after_values