Python:移除NumPy数组中的重复元素并保留顺序
移除NumPy子数组重复项并保留原顺序
问题场景
你有一个包含重复NumPy子数组的列表,需要移除重复项且保留元素的原始出现顺序——list(set(my_array))因NumPy数组不可哈希失效,np.unique()会改变元素顺序,都不符合需求。
解决方案
通过将子数组转换为可哈希的元组,结合遍历记录已出现元素的方式实现:
import numpy as np # 示例输入数组列表 my_array = [ np.array([1.4600e-01, 2.9575e+00, 6.1580e+02]), np.array([5.860e-01, 4.507e+00, 8.748e+02]), np.array([1.4600e-01, 2.9575e+00, 6.1580e+02]), np.array([5.860e-01, 4.507e+00, 8.748e+02]), np.array([9.6900e-01, 1.7822e+00, 1.0829e+04]), np.array([0.701, 1.6545, 603.3]) ] seen = set() result = [] for arr in my_array: # 将数组转为元组,作为可哈希的键存入集合 arr_tuple = tuple(arr) if arr_tuple not in seen: seen.add(arr_tuple) result.append(arr) print(result)
代码说明
- 转换为元组:NumPy数组本身不可哈希,无法直接加入集合,转为元组后可被集合识别。
- 遍历去重:遍历原列表,用集合记录已出现的子数组对应的元组,只保留第一次出现的子数组,确保顺序不变。
- 保留原类型:最终结果列表中的元素仍然是NumPy数组,符合需求。
执行上述代码后,输出结果即为无重复且顺序不变的子数组列表。
内容的提问来源于stack exchange,提问作者Dila
相关产品推荐
相关产品推荐

