繁体   English   中英

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

[英]Matching most similar lists in 2 group of lists in python

我有 2 个 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 个内部列表。

ab可能有不同数量的内部列表。

有没有库或函数可以实现这么快? 在我的问题中,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中的列表匹配,但您应该能够轻松适应它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM