如何将数组n1按数组r1的排序置换规则进行重排?
解决numpy数组排序后保持对应关系的问题
要让n1遵循r1的排序规则重排,核心是利用np.argsort()方法获取排序的索引映射,具体步骤如下:
- 获取r1排序后的索引数组:
indices = np.argsort(r1)np.argsort()返回的是原数组元素排序后对应的原索引位置,比如原数组[3,1,2],argsort会返回[1,2,0],表示排序后的第一个元素来自原数组索引1,第二个来自索引2,第三个来自索引0。
- 用该索引数组分别重排r1和n1:
import numpy as np # 示例数组 r1 = np.array([3, 1, 2]) n1 = np.array([10, 20, 30]) indices = np.argsort(r1) r2 = r1[indices] # 等价于np.sort(r1),结果为[1,2,3] n2 = n1[indices] # 结果为[20,30,10],保持与r2的对应关系 - 验证:原r1中
r1[0]=3对应n1[0]=10,排序后r2中r2[2]=3对应n2[2]=10,对应关系完全保留。
如果r1存在重复元素,np.argsort()依然能正确处理重复值的排序索引,保证n1的元素与r1排序后的元素一一对应。
内容的提问来源于stack exchange,提问作者numa
相关产品推荐
相关产品推荐

