如何对 numpy 数组进行哈希处理以检查重复项

Mic*_*all 5 python arrays hash numpy

我已经搜索了一些教程等来帮助解决这个问题,但似乎找不到任何东西。

我有两个 n 维 numpy 数组列表(某些图像的 3D 数组形式),并且想要检查每个列表中的重叠图像。可以说列表 a 是训练集,列表 b 是验证集。一种解决方案是使用嵌套循环并检查每对数组是否相等,np.array(a[i], b[j])但这很慢(每个列表中有大约 200,000 个 numpy 数组)并且坦率地说非常恶心。

我正在考虑实现此目的的一种更优雅的方法是对每个列表中的每个 numpy 数组进行哈希,然后使用这些哈希表比较每个条目。

首先,这个解决方案是否正确,其次,我将如何实现这一目标?
下面是一些数据的示例。

train_dataset[:3]
array([[[-0.5       , -0.49607843, -0.5       , ..., -0.5       ,
         -0.49215686, -0.5       ],
        [-0.49607843, -0.47647059, -0.5       , ..., -0.5       ,
         -0.47254902, -0.49607843],
        [-0.49607843, -0.49607843, -0.5       , ..., -0.5       ,
         -0.49607843, -0.49607843],
        ..., 
        [-0.49607843, -0.49215686, -0.5       , ..., -0.5       ,
         -0.49215686, -0.49607843],
        [-0.49607843, -0.47647059, -0.5       , ..., -0.5       ,
         -0.47254902, -0.49607843],
        [-0.5       , -0.49607843, -0.5       , ..., -0.5       ,
         -0.49607843, -0.5       ]],

       [[-0.5       , -0.5       , -0.5       , ...,  0.48823529,
          0.5       ,  0.1509804 ],
        [-0.5       , -0.5       , -0.5       , ...,  0.48431373,
          0.14705883, -0.32745099],
        [-0.5       , -0.5       , -0.5       , ..., -0.32745099,
         -0.5       , -0.49607843],
        ..., 
        [-0.5       , -0.44901961,  0.1509804 , ..., -0.5       ,
         -0.5       , -0.5       ],
        [-0.49607843, -0.49607843, -0.49215686, ..., -0.5       ,
         -0.5       , -0.5       ],
        [-0.5       , -0.49607843, -0.48823529, ..., -0.5       ,
         -0.5       , -0.5       ]],

       [[-0.5       , -0.5       , -0.5       , ..., -0.5       ,
         -0.5       , -0.5       ],
        [-0.5       , -0.5       , -0.5       , ..., -0.5       ,
         -0.5       , -0.5       ],
        [-0.5       , -0.5       , -0.49607843, ..., -0.5       ,
         -0.5       , -0.5       ],
        ..., 
        [-0.5       , -0.5       , -0.5       , ..., -0.48823529,
         -0.5       , -0.5       ],
        [-0.5       , -0.5       , -0.5       , ..., -0.5       ,
         -0.5       , -0.5       ],
        [-0.5       , -0.5       , -0.5       , ..., -0.5       ,
         -0.5       , -0.5       ]]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

我很感谢您提前提供的帮助。

Eel*_*orn 3

numpy_indexed包(声明:我是它的作者)对此有一个有效的单行:

import numpy_indexed as npi
duplicate_images = npi.intersection(train_dataset, test_dataset) 
Run Code Online (Sandbox Code Playgroud)

还有许多相关功能,您可能会发现在这种情况下很有用。