在python中匹配两组列表中最相似的列表

在python中匹配两组列表中最相似的列表,python,Python,我有两个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

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

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,1,1,1,0]更类似于[1,0,1,0,1,0]

a
中的每个内部列表应仅与
b
中的1个内部列表匹配

a
b
可能具有不同数量的内部列表


有没有一个库或函数可以实现这么快的速度?在我的问题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)
将numpy导入为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绑定列表(x,y):
xor=np.按位xor(x,y)
返回np.count\u非零(XOR)
对于范围(len(a))内的x:
最佳指数=0
最佳距离=999999999
对于范围内的y(len(b)):
dist=绑定列表(a[x],b[y])
如果距离<最佳距离:
最佳距离
最佳指数=y
打印(“a”,x,a[x])
打印(“b”,最佳索引,b[最佳索引])
打印(“距离”,最佳距离)

该代码允许
a
中的多个列表与
b
中的列表匹配,但您应该能够轻松地调整它。

定义最相似的?我定义的Danimesjo。我会使用一些相似性度量,可能是均方误差或平均绝对误差,迭代,如果MAE/MSE的值最低,则匹配最接近