numpy中argsort()的用户定义绑定中断器

2024-06-07 04:05:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数组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中实现这一点


Tags: andnumpy元素示例byhere排序数组
1条回答
网友
1楼 · 发布于 2024-06-07 04:05:03

函数argsort从文档接收order参数:

When a is an array with fields defined, this argument specifies which fields to compare first, second, etc.

因此,您可以从这两个值创建一个结构化数组,然后按顺序传递字段:

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]

相关问题 更多 >