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

如何使用NumPy按指定列数值从高到低排序多维数组

NumPy数组按指定列降序排序问题

我在NumPy文档里没找到对应的用法,来求助。我有这么一个数组(注:原始代码里的Larry、90%写法不符合Python语法,实际要改成字符串和浮点数形式):

import numpy as np
X = np.array([
            ['Larry', 0.9],
            ['Beth', 1.0],
            ['Arnold', 0.9],
])

我想按第二个元素(百分比数值)从高到低排序,期望结果是:

array([['Beth', 1.],
       ['Arnold', 0.9],
       ['Larry', 0.9]], dtype='<U6')

我试过用argsort,但下面这段代码根本不起作用:

X = X[-X[:, 0].argsort()]

解决步骤

1. 先改对索引

你之前的代码用了X[:, 0],这是取数组的第一列(名字列),但你要按第二列排序,得改成X[:, 1]才行。

2. 正确实现降序排序

argsort()默认是升序排序,要实现降序有两种简单方法:

  • 对升序索引反转:
# 获取第二列的升序索引,反转后得到降序顺序
sorted_idx = X[:, 1].argsort()[::-1]
X_sorted = X[sorted_idx]
  • 对第二列取负数后再用argsort:
sorted_idx = (-X[:, 1]).argsort()
X_sorted = X[sorted_idx]

3. 保证同分值的原始顺序

如果想让同分值(比如两个90%)保持它们在原数组里的相对顺序(稳定排序),可以用np.lexsort结合原索引:

# 先按第二列降序,再按原数组的索引升序,确保同分值顺序不变
sorted_idx = np.lexsort([np.arange(len(X)), -X[:, 1]])
X_sorted = X[sorted_idx]

这样就能得到你想要的结果:Beth排第一,接着是Arnold、Larry。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:24:17