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

如何仅用一次排序/argsort操作实现按另一数组顺序的数组累加和?

问题解答

可以通过一次argsort操作实现需求,避免第二次排序/逆序操作,具体方案如下:

优化代码

import numpy as np
arr1 = np.array([1,4,2,5,6,3,2])
arr2 = np.array([1,0,2,4,3,6,5])

sorting_indices = np.argsort(arr2)
# 按arr2的排序顺序计算arr1的累加和
sorted_cumsum = np.cumsum(arr1[sorting_indices])
# 直接将累加结果映射回原数组位置
result = np.empty_like(sorted_cumsum)
result[sorting_indices] = sorted_cumsum

print(result)
# 输出:array([ 5,  4,  7, 18, 13, 23, 20])

原理说明

  1. np.argsort(arr2)得到的是将arr2从小到大排序时的原索引序列,示例中sorting_indices = [1,0,2,4,3,6,5],表示arr2中最小的元素在索引1,次小在索引0,以此类推。
  2. 计算arr1[sorting_indices]的累加和,得到按arr2排序顺序的累计结果sorted_cumsum。
  3. 通过result[sorting_indices] = sorted_cumsum,直接将排序后的累加值“放回”到原arr2元素对应的位置:比如sorted_cumsum[0]对应arr2最小元素的位置(索引1),sorted_cumsum[1]对应arr2次小元素的位置(索引0),以此类推,最终得到与需求完全一致的结果。

这种方法只执行了一次argsort操作,相比原方案省去了np.argsort(sorting_indices)的逆序计算,效率更高,逻辑也更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:43:12