如何基于自定义函数计算结果对二维NumPy数组进行升序排序
用NumPy的
argsort()实现按自定义函数结果排序 完全明白你的需求,咱们直接上代码和解释,保证一步到位:
步骤1:导入NumPy并定义原数组
首先把你的数组用NumPy格式定义好:
import numpy as np # 原数组 arr = np.array([[7, 2], [7, 3], [2, 8], [4, 3], [5, 5]])
步骤2:计算每个元素的函数得分
先提取数组里的x和y值,然后代入你给出的函数计算每个元素的得分:
# 提取x和y列 x = arr[:, 0] y = arr[:, 1] # 计算每个元素的函数结果 scores = ((x**2 + y - 11)**2) + ((x + y**2 - 7)**2)
计算出来的scores数组是:array([57, 29, 261, 0, 1]),对应原数组每个元素的得分,正好匹配你想要的排序逻辑。
步骤3:用argsort()获取排序索引并重构数组
argsort()会返回得分数组升序排列的索引位置,我们用这个索引去切片原数组,就能得到按得分升序排序后的结果:
# 获取升序排序的索引 sorted_indices = scores.argsort() # 用索引重构排序后的数组 sorted_arr = arr[sorted_indices] print(sorted_arr) # 输出结果:[[4 3] # [5 5] # [7 2] # [7 3] # [2 8]]
完美匹配你期望的排序结果!
关于重复元素的补充
如果数组里有多个元素的函数得分相同,默认的argsort()是不稳定排序(也就是相同得分的元素相对顺序可能和原数组不一致)。如果需要保留原数组中相同得分元素的相对顺序,可以指定排序算法为mergesort:
sorted_indices = scores.argsort(kind='mergesort')
内容的提问来源于stack exchange,提问作者TheShin
相关产品推荐
相关产品推荐

