为什么numpy.argsort()拖延领带的索引?

时间:2019-10-25 15:30:38

标签: python arrays numpy

我正在使用python3。问题出在numpy.argsort()。

我有两个数组(例如A和B)。我想按数组B中的值对数组A中的值进行排序。我使用此代码。

A_ordered = A[B.argsort()]

在数组B中,很可能发生联系。有时甚至数组B中的每个值都相同。

当B中有关系时,我不希望A中的值更改顺序。因此,当B中的值绑定在一起时,我希望它们使用.argsort()保持其相对索引顺序。

这是将B中的每个值都绑定在一起时问题的一个示例。由np.argsort()给出的索引看起来像是经过改组的。

B = np.empty(23000) #creating empty array
B.fill(0.5) #filling it with equal values of 0.5
print(B.argsort()) #trying to sort

Out[176]: array([    0, 15338, 15337, ...,  7660,  7680, 22999], dtype=int64)

由于B中的所有值都相等,所以我期望的是

Out[176]: array([    0, 1, 2, ...,  22997,  22998, 22999], dtype=int64)

我不想使用下面的方法对基于B的A进行排序,因为在平局的情况下,将使用A的值进行排序。

A = [x for _,x in sorted(zip(B,A))]

非常感谢!

1 个答案:

答案 0 :(得分:2)

您需要告诉argsort使用稳定排序方法。

>>> print(B.argsort(kind='stable')) #trying to sort
[    0     1     2 ... 22997 22998 22999]