按指定匹配规则重排numpy数组并合并的实现方法
实现方案
步骤说明
- 提取
array1的第二列作为排序参照标准; - 建立
array2第一列值与行索引的映射关系; - 根据参照标准的顺序,获取对应的
array2行索引,完成排序; - 将排序后的
array2的第二列与array1水平合并,得到最终数组。
代码实现
import numpy as np # 定义原始数组 array1 = np.array( [[1, 2], [2, 1], [3, 3]]) array2 = np.array( [[2, 3], [3, 2], [1, 1]]) # 1. 获取array1的第二列作为排序参照序列 ref_sequence = array1[:, 1] # 2. 构建array2第一列值到行索引的映射 val_index_map = {val: idx for idx, val in enumerate(array2[:, 0])} # 3. 根据参照序列生成排序索引,对array2排序 sorted_indices = [val_index_map[val] for val in ref_sequence] sorted_array2 = array2[sorted_indices] # 4. 合并array1与排序后array2的第二列 final_array = np.hstack((array1, sorted_array2[:, 1:])) # 输出结果 print("排序后的array2:") print(sorted_array2) print("\n最终合并数组:") print(final_array)
代码解释
ref_sequence = array1[:, 1]:提取array1第二列,得到[2, 1, 3],这是我们需要的匹配顺序;val_index_map:将array2第一列的每个值与其所在行的索引绑定,比如2对应行索引0,1对应行索引2;sorted_indices:根据参照序列的每个值,从映射字典中取出对应的行索引,得到[0, 2, 1],用这个索引数组筛选array2的行,即可得到目标排序结果;np.hstack:将array1与排序后array2的第二列水平拼接,生成最终的3列数组。
内容的提问来源于stack exchange,提问作者Mamdud
相关产品推荐
相关产品推荐

