You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于自定义函数计算结果对二维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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:50:25