我正在使用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))]
非常感谢!
答案 0 :(得分:2)
您需要告诉argsort
使用稳定排序方法。
>>> print(B.argsort(kind='stable')) #trying to sort
[ 0 1 2 ... 22997 22998 22999]