如果我有两个并行列表,并想按第一个中的元素顺序对其进行排序,则非常简单:
>>> 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列表中?
b[a.argsort()] 应该可以。
b[a.argsort()]
运作方式如下。首先,您需要找到排序为a的排列。argsort是一种计算方法:
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])