gpt4 book ai didi

python - 为什么 numpy.argsort() 会改组关系的索引?

转载 作者:行者123 更新时间:2023-11-28 16:55:43 24 4
gpt4 key购买 nike

我正在使用 python 3。问题出在 numpy.argsort() 上。

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

A_ordered = A[B.argsort()]

在数组 B 中,很可能出现平局。有时甚至,数组 B 中的每个值都是相同的。

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

这是 B 中的每个值都绑定(bind)时的问题示例。 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))]

非常感谢!

最佳答案

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

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

关于python - 为什么 numpy.argsort() 会改组关系的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58561532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com