如何基于浮点型末列对二维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
相关产品推荐
相关产品推荐

