匹配python中2组列表中的大多数相似列表



我有两个python列表,其中包含内部列表。所有内部列表都有相同数量的元素。所有内部列表由0s和1s组成。

a = [[0,1,0,0,0,1,1,1,0,1,0,0],
[0,0,0,1,0,1,0,1,0,1,0,0],
[0,1,0,1,0,0,1,1,0,1,0,0],
[1,1,0,0,0,1,1,0,1,1,1,0]]
b = [[0,1,1,0,0,1,1,1,0,0,0,0],
[0,1,0,0,0,1,1,1,1,1,0,0],
[0,1,1,0,0,1,1,0,0,1,0,1],
[1,1,1,0,0,1,1,1,0,1,1,0]]

我想将a中的每个内部列表与b中最相似的内部列表进行匹配。最相似的意思是:在a中的内部列表中,尽可能多的具有相同索引值的元素在b的内部列表中将是相同的。

我的意思是[1,1,1,0,1,0]更类似于[1,1,0,10]而不是[1,1,1,1,0]。

来自a的每个内部列表应仅与来自b的1个内部列表匹配。

CCD_ 8和CCD_ 9可以具有不同数量的内部列表。

有没有一个库或函数可以这么快实现?在我的问题中,a和b有500多个内部列表,每个内部列表大约有35个元素。

您可以使用NumPy快速异或两个二进制列表,以获得两者之间的差异,然后计算差异列表中的1数。这只是计算到二进制列表之间的编辑距离的一种快速方法。

import numpy as np
a = [[0,1,0,0,0,1,1,1,0,1,0,0],
[0,0,0,1,0,1,0,1,0,1,0,0],
[0,1,0,1,0,0,1,1,0,1,0,0],
[1,1,0,0,0,1,1,0,1,1,1,0]]
b = [[0,1,1,0,0,1,1,1,0,0,0,0],
[0,1,0,0,0,1,1,1,1,1,0,0],
[0,1,1,0,0,1,1,0,0,1,0,1],
[1,1,1,0,0,1,1,1,0,1,1,0]]
def bindist(x, y):
xors = np.bitwise_xor(x, y)
return np.count_nonzero(xors)
for x in range(len(a)):
best_index = 0
best_dist = 9999999999999
for y in range(len(b)):
dist = bindist(a[x],b[y])
if dist < best_dist:
best_dist = dist
best_index = y
print("a", x, a[x])
print("b", best_index, b[best_index])
print("distance", best_dist)

该代码允许a中的多个列表与b中的列表相匹配,但您应该能够毫不费力地对其进行调整。

最新更新