numpy中argsort()函数的用户自定义排序规则

3

我有两个数组vc(可以理解为值和成本)。

我需要对v执行argsort()操作,以便如果v中有2个元素相同,则它们需要根据它们在c中对应的元素进行排序。

示例

v = [4,1,4,4] # Here 0th, 2nd and 3rd elemnt are equal
c = [5,0,30,10]
numpy.argsort(v) = [1,0,2,3] # equal values sorted by index 

所需输出

[1,0,3,2] # c[0] < c[3] < c[2]

如何在Python中实现这个功能?

1个回答

4
函数 argsort 接受一个参数 order,参见文档:

当 a 是一个定义了字段的数组时,此参数指定比较第一个字段、第二个字段等。

因此,您可以从这两个值创建一个结构化数组,并按顺序传递字段。
import numpy as np

v = [4, 1, 4, 4]  
c = [5, 0, 30, 10]

s = np.array(list(zip(v, c)), dtype=[('value', 'i4'), ('cost', 'i4')])
result = np.argsort(s, order=['value', 'cost'])

print(result)

输出

[1 0 3 2]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接