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

是否存在根据索引向量排序的NumPy函数?求反向argsort类实现

用NumPy实现基于目标索引向量的排序(反向argsort)

嘿,这个需求其实用NumPy的高级索引赋值就能完美解决,完全不用写复杂的自定义逻辑!

先拆解下你的例子逻辑:my_vector里的每个元素,需要根据my_indices中对应位置的值,放到结果数组的指定索引位置上。比如:

  • my_vector[0] = 9.对应my_indices[0] = 1. → 放到结果的第1位
  • my_vector[3] = 17.对应my_indices[3] = 0. → 放到结果的第0位
  • 以此类推完成所有元素的位置映射

实现代码

import numpy as np

my_vector = np.array([9., 6., 21., 17., 12.])
my_indices = np.array([1., 4., 2., 0., 3.])

# 第一步:把float类型的索引转成整数(NumPy索引必须是整数类型)
indices_int = my_indices.astype(int)

# 第二步:创建空结果数组,用目标索引完成赋值
what_i_want = np.empty_like(my_vector)
what_i_want[indices_int] = my_vector

print(what_i_want)
# 输出:[17.  9. 21. 12.  6.]

关键说明

  1. 索引类型转换:你的my_indices是float数组,而NumPy不允许用浮点数作为索引,所以必须先用astype(int)转成整数类型。如果你的索引本来就是整数数组,这一步可以直接省略。
  2. 高级索引赋值:what_i_want[indices_int] = my_vector是核心逻辑——它会把my_vector的第i个元素,精准放到what_i_want的第indices_int[i]个位置上,正好实现了你要的“反向argsort”效果。

和argsort的区别

常规的np.argsort是给你一个数组,返回每个元素应该排到的位置索引;而这个方法是反过来,给每个元素指定目标位置,直接完成重排,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:31:54