是否存在根据索引向量排序的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.]
关键说明
- 索引类型转换:你的
my_indices是float数组,而NumPy不允许用浮点数作为索引,所以必须先用astype(int)转成整数类型。如果你的索引本来就是整数数组,这一步可以直接省略。 - 高级索引赋值:
what_i_want[indices_int] = my_vector是核心逻辑——它会把my_vector的第i个元素,精准放到what_i_want的第indices_int[i]个位置上,正好实现了你要的“反向argsort”效果。
和argsort的区别
常规的np.argsort是给你一个数组,返回每个元素应该排到的位置索引;而这个方法是反过来,给每个元素指定目标位置,直接完成重排,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者hanuta98
相关产品推荐
相关产品推荐

