在NumPy中获取两个等长整数向量唯一元素对的最简方法?
在NumPy中获取唯一元素对的简洁方法
可以通过以下步骤实现,核心利用np.unique的多维度去重能力:
- 将两个向量按列堆叠成二维数组,每一行代表一个元素对
- 使用
np.unique对二维数组去重,同时保留元素对的首次出现顺序 - 拆分去重后的二维数组,得到对应的两个结果向量
代码实现
import numpy as np a0 = np.asarray([0, 1, 4, 1, 0, 4]) a1 = np.asarray([0, 2, 3, 2, 0, 2]) # 堆叠成二维数组,每一行对应一组(a0[i], a1[i])元素对 pairs = np.column_stack((a0, a1)) # 按行去重,返回去重后的数组及原数组中首次出现的索引 unique_pairs, indices = np.unique(pairs, axis=0, return_index=True) # 对索引排序,保证结果顺序与元素对首次出现的顺序一致 sorted_indices = np.sort(indices) # 从原数组中提取对应元素得到结果 b0 = a0[sorted_indices] b1 = a1[sorted_indices] print(b0) # 输出: [0 1 4 4] print(b1) # 输出: [0 2 3 2]
关键说明
np.column_stack((a0, a1)):将两个一维向量合并为二维数组,把每一组对应元素转化为数组的一行np.unique(..., axis=0, return_index=True):指定axis=0实现按行(即元素对)去重,return_index=True会返回去重后元素在原数组中的首次出现位置索引- 对索引排序是因为
np.unique返回的索引默认是按元素值排序后的位置,排序后才能还原元素对在原数组中首次出现的顺序
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

