我有一个普通的Python列表,其中包含(多维)numPy数组,它们的形状和数量均相同。列表中的某些数组是早期数组的重复。
我有一个要删除所有重复项的问题,但是数据类型为numPy数组这一事实使这一点变得有些复杂…
•我不能使用set(),因为numPy数组不可哈希。 •我无法在插入过程中检查重复项,因为数组是通过函数批量生成的,并使用.extend()添加到列表中。 •不诉诸numPy自己的函数就不能直接比较numPy数组,因此我不能只使用使用“ if x in list”的东西… •列表的内容需要在最后保留numPy数组的过程; 我可以比较转换为嵌套列表的数组的副本,但不能将数组永久转换为直接的python列表。
关于如何在此处有效删除重复项的任何建议?
在这里使用解决方案:对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])]