Python:当第一个数组被排序时,如何使第二个数组的索引与第一个数组的索引匹配?

Python:当第一个数组被排序时,如何使第二个数组的索引与第一个数组的索引匹配?,python,arrays,numpy,sorting,Python,Arrays,Numpy,Sorting,我有两个Numpy数组:a:[2,5,3,7,9,1]和b:[1,2,3,4,5,6]。我想对a进行排序,并使b的元素以与a的索引相同的方式移动。在这种情况下,a将变成[1,2,3,5,7,9],b将变成[6,1,3,2,4,5]。我知道如何使用np.sort对a进行排序,但是如何使用NumPy的argsort重新排列b?: >>> b[a.argsort()] array([6, 1, 3, 2, 4, 5]) 没有NumPy的替代方案: >>> a, b

我有两个Numpy数组:
a:[2,5,3,7,9,1]
b:[1,2,3,4,5,6]
。我想对a进行排序,并使
b
的元素以与
a
的索引相同的方式移动。在这种情况下,
a
将变成
[1,2,3,5,7,9]
b
将变成
[6,1,3,2,4,5]
。我知道如何使用
np.sort
a
进行排序,但是如何使用NumPy的
argsort
重新排列
b

>>> b[a.argsort()]
array([6, 1, 3, 2, 4, 5])
没有NumPy的替代方案:

>>> a, b = zip(*sorted(zip(a, b)))
>>> a
(1, 2, 3, 5, 7, 9)
>>> b
(6, 1, 3, 2, 4, 5)


使用NumPy的
argsort

>>> b[a.argsort()]
array([6, 1, 3, 2, 4, 5])
没有NumPy的替代方案:

>>> a, b = zip(*sorted(zip(a, b)))
>>> a
(1, 2, 3, 5, 7, 9)
>>> b
(6, 1, 3, 2, 4, 5)


顺便说一句,我认为纯Python解决方案可能会导致一种不稳定的
问题。对于
a
本身,它可能并不重要(如果只是数字),但它会影响
b
的顺序。我可以做
a,b=zip(*排序(zip(a,range(len(a)),b)))
等等,但这不太好看…也许
a,b=zip(*排序(zip(a,b),key=itemgetter(0))
?只需删除第二个元素的比较。@hilberts\u问题看起来不错。或者一个技巧:
sorted(b,key=partial(next,iter(a)))
:-)作为旁白,我认为纯Python解决方案可能会导致一个不稳定的
a
@hilberts\u饮酒问题,嗯,对。对于
a
本身,它可能并不重要(如果只是数字),但它会影响
b
的顺序。我可以做
a,b=zip(*排序(zip(a,range(len(a)),b)))
等等,但这不太好看…也许
a,b=zip(*排序(zip(a,b),key=itemgetter(0))
?只需删除第二个元素的比较。@hilberts\u问题看起来不错。或者一个技巧:
排序(b,key=partial(下一步,iter(a)))
:-)