一尘不染

如何“压缩排序”并行的numpy数组?

python

如果我有两个并行列表,并想按第一个中的元素顺序对其进行排序,则非常简单:

>>> a = [2, 3, 1]
>>> b = [4, 6, 7]
>>> a, b = zip(*sorted(zip(a,b)))
>>> print a
(1, 2, 3)
>>> print b
(7, 4, 6)

我如何使用numpy数组执行相同操作而又不将其拆包到常规Python列表中?


阅读 146

收藏
2020-12-20

共1个答案

一尘不染

b[a.argsort()] 应该可以。

运作方式如下。首先,您需要找到排序为a的排列。argsort是一种计算方法:

>>> a = numpy.array([2, 3, 1])
>>> p = a.argsort()
>>> p
[2, 0, 1]

您可以轻松地检查这是否正确:

>>> a[p]
array([1, 2, 3])

现在对b应用相同的排列。

>>> b = numpy.array([4, 6, 7])
>>> b[p]
array([7, 4, 6])
2020-12-20