8000 ENH: avoid meshgrid and fancy indexing for 1d masked sort · numpy/numpy@acc3369 · GitHub
[go: up one dir, main page]

Skip to content

Commit acc3369

Browse files
committed
ENH: avoid meshgrid and fancy indexing for 1d masked sort
Improves performance by using the simple indexing path and memory by avoiding creating a full meshgrid.
1 parent 10098da commit acc3369

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

numpy/ma/core.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5082,10 +5082,16 @@ def sort(self, axis= -1, kind='quicksort', order=None,
50825082
filler = maximum_fill_value(self)
50835083
else:
50845084
filler = fill_value
5085-
idx = np.meshgrid(*[np.arange(x) for x in self.shape], sparse=True,
5086-
indexing='ij')
5087-
idx[axis] = self.filled(filler).argsort(axis=axis, kind=kind,
5088-
order=order)
5085+
5086+
sidx = self.filled(filler).argsort(axis=axis, kind=kind,
5087+
order=order)
5088+
# save meshgrid memory for 1d arrays
5089+
if self.ndim == 1:
5090+
idx = sidx
5091+
else:
5092+
idx = np.meshgrid(*[np.arange(x) for x in self.shape], sparse=True,
5093+
indexing='ij')
5094+
idx[axis] = sidx
50895095
tmp_mask = self._mask[idx].flat
50905096
tmp_data = self._data[idx].flat
50915097
self._data.flat = tmp_data
@@ -6187,10 +6193,16 @@ def sort(a, axis= -1, kind='quicksort', order=None, endwith=True, fill_value=Non
61876193
filler = maximum_fill_value(a)
61886194
else:
61896195
filler = fill_value
6190-
# return
6191-
indx = np.meshgrid(*[np.arange(x) for x in a.shape], sparse=True,
6192-
indexing='ij')
6193-
indx[axis] = filled(a, filler).argsort(axis=axis, kind=kind, order=order)
6196+
6197+
sindx = filled(a, filler).argsort(axis=axis, kind=kind, order=order)
6198+
6199+
# save meshgrid memory for 1d arrays
6200+
if a.ndim == 1:
6201+
indx = sindx
6202+
else:
6203+
indx = np.meshgrid(*[np.arange(x) for x in a.shape], sparse=True,
6204+
indexing='ij')
6205+
indx[axis] = sindx
61946206
return a[indx]
61956207
sort.__doc__ = MaskedArray.sort.__doc__
61966208

0 commit comments

Comments
 (0)
0