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

基于每行指定区间元素求和结果对NumPy二维数组降序排序

解决方法

针对你的需求,这里提供两种可行的实现方式,优先推荐使用NumPy原生操作(效率更高,适合大规模数组):

方法一:NumPy原生操作(推荐)

  1. 计算每行指定片段的和:比如你要选取第2到第3个元素(对应NumPy的0-based索引1:3),对该切片求和
  2. 根据求和结果的降序获取排序索引
  3. 用索引对原数组重排

示例代码:

import numpy as np

# 你的示例数组
a = np.array([[0.80372444, 0.35468653, 0.9081662 , 0.69995566],
              [0.53712474, 0.90619077, 0.69068265, 0.73794143],
              [0.14056974, 0.34685164, 0.87505744, 0.56927803]])

# 计算每行第2-3个元素的和(0-based索引1到2)
segment_sums = np.sum(a[:, 1:3], axis=1)
# 获取降序排序的索引
sorted_indices = np.argsort(-segment_sums)
# 对原数组排序
a_sorted = a[sorted_indices]

print(a_sorted)

输出结果:

array([[0.53712474, 0.90619077, 0.69068265, 0.73794143],
       [0.80372444, 0.35468653, 0.9081662 , 0.69995566],
       [0.14056974, 0.34685164, 0.87505744, 0.56927803]])

方法二:使用Python内置sorted函数

如果你更习惯Python列表操作,可以自定义key函数,只对指定片段求和,并设置reverse=True实现降序:

import numpy as np

a = np.array([[0.80372444, 0.35468653, 0.9081662 , 0.69995566],
              [0.53712474, 0.90619077, 0.69068265, 0.73794143],
              [0.14056974, 0.34685164, 0.87505744, 0.56927803]])

# 自定义key:取每行第2-3个元素求和,reverse=True实现降序
a_sorted = np.array(sorted(a, key=lambda row: sum(row[1:3]), reverse=True))

print(a_sorted)

关键说明

  • 注意NumPy的索引是0-based:如果你说的"第2到第3个元素"是1-based的表述,对应切片是1:3(左闭右开,包含索引1和2);如果是其他区间,比如第2到第6个元素,只需调整切片为1:6即可。
  • NumPy原生操作避免了数组到列表的转换,在处理大型数组时性能远优于Python的sorted方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:18:28