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

如何基于浮点型末列对二维numpy数组进行整行排序

解决方案

标准实现代码

numpy原生的argsort方法本身完全支持浮点数值排序,你遇到浮点相关报错大概率是数组中存在NaN(非数值)类的特殊浮点值,以下是可直接运行的标准实现方案:

import numpy as np

# 此处arr替换为你实际的数组变量名
# 提取最后一列的升序排序索引
sort_indices = arr[:, -1].argsort()
# 按索引重排整行,自动保持行列元素的绑定关系
sorted_arr = arr[sort_indices]

# 若需要按最后一列降序排序,使用以下代码即可
# sorted_arr = arr[sort_indices[::-1]]

浮点报错的排查与修复

如果运行上述代码仍然触发浮点相关错误,按以下步骤处理:

  • 先检查数组中是否存在NaN:执行print(np.isnan(arr).any()),如果返回True说明数组中存在非数值
  • 存在NaN时使用np.nanargsort替代原生argsort,会自动将NaN排到结果末尾:
    sort_indices = np.nanargsort(arr[:, -1])
    sorted_arr = arr[sort_indices]
    
  • 若需要自定义NaN的排序位置,可先将NaN填充为极值后再排序:
    # 示例:将NaN替换为极小值,排在排序结果最前面
    last_col = np.where(np.isnan(arr[:, -1]), -np.inf, arr[:, -1])
    sort_indices = last_col.argsort()
    sorted_arr = arr[sort_indices]
    

效果验证

对你提供的示例数组执行升序排序后,最后一列会按从小到大排列,所有行元素保持对应关系,排序后的前5行结果如下:

array([[ 1.        ,  9.49327265, 16.33220702, 17.52747136],
       [ 1.        , 10.04666903, 17.44804702, 18.77179989],
       [ 1.        ,  7.15263928, 19.34313597, 19.34749615],
       [ 1.        ,  9.78451265, 18.31697539, 19.41765432],
       [ 1.        ,  9.59539133, 19.12802603, 20.06255417]])

内容的提问来源于stack exchange,提问作者Fiddelush

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:42:01