I have two arrays with the shape (74395, 1) storing float values where arr1[0] correlates to arr2[0] and so on. I would like to sort them together in ascending order by the values stored in the second array.
As an example:
arr1: [[1]
[2]
[3]]
arr2: [[6]
[2]
[4]]
wanted result:
arr1: [[2]
[3]
[1]]
arr2: [[2]
[4]
[6]]
How could I do that in python?
CodePudding user response:
zip
the two together, sort, zip
again to transpose the result, and destructure:
>>> arr1 = [1, 2, 3]
>>> arr2 = [6, 2, 4]
>>> arr2, arr1 = zip(*sorted(zip(arr2, arr1)))
>>> arr1
(2, 3, 1)
>>> arr2
(2, 4, 6)
CodePudding user response:
Use numpy.argsort
with numpy.take_along_axis
:
ind = arr2.argsort(axis=0)
np.take_along_axis(arr1, ind, axis=0)
np.take_along_axis(arr2, ind, axis=0)
Output:
(array([[2],
[3],
[1]]),
array([[2],
[4],
[6]]))