小编典典

从numPy数组列表中删除重复项

python

我有一个普通的Python列表,其中包含(多维)numPy数组,它们的形状和数量均相同。列表中的某些数组是早期数组的重复。

我有一个要删除所有重复项的问题,但是数据类型为numPy数组这一事实使这一点变得有些复杂…

•我不能使用set(),因为numPy数组不可哈希。
•我无法在插入过程中检查重复项,因为数组是通过函数批量生成的,并使用.extend()添加到列表中。
•不诉诸numPy自己的函数就不能直接比较numPy数组,因此我不能只使用使用“ if x in list”的东西…
•列表的内容需要在最后保留numPy数组的过程; 我可以比较转换为嵌套列表的数组的副本,但不能将数组永久转换为直接的python列表。

关于如何在此处有效删除重复项的任何建议?


阅读 213

收藏
2021-01-16

共1个答案

小编典典

在这里使用解决方案:对numpy数组进行散列的最有效属性,我们看到如果a是一个numpy数组,则散列与a.tostring()一起使用效果最佳。所以:

import numpy as np
arraylist = [np.array([1,2,3,4]), np.array([1,2,3,4]), np.array([1,3,2,4])]
L = {array.tostring(): array for array in arraylist}
L.values() # [array([1, 3, 2, 4]), array([1, 2, 3, 4])]
2021-01-16