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)
我很感谢您提前提供的帮助。
numpy_indexed包(声明:我是它的作者)对此有一个有效的单行:
import numpy_indexed as npi
duplicate_images = npi.intersection(train_dataset, test_dataset)
Run Code Online (Sandbox Code Playgroud)
还有许多相关功能,您可能会发现在这种情况下很有用。