Python 比特串相似性分数

Python 比特串相似性分数,python,algorithm,bit-manipulation,similarity,bitstring,Python,Algorithm,Bit Manipulation,Similarity,Bitstring,我有一个包含14000行问卷数据的CSV文件。问卷有MCQ多重应答(M10、M13)。对于MCQ-MR,如M13中,有8个选项,如果受访者选择某个选项,则表示为1,否则表示为0。我想为每个位字符串生成一个相似性分数,并将其替换为位字符串。分数的计算方式应类似于00010011和00100011更相似,因为受访者选择了相同的选择,除了第三和第四个选择,因此分数必须比00010011和00000001更接近 M10,M13 1111000100001000,00000001 101010000001

我有一个包含14000行问卷数据的CSV文件。问卷有MCQ多重应答(M10、M13)。对于MCQ-MR,如M13中,有8个选项,如果受访者选择某个选项,则表示为1,否则表示为0。我想为每个位字符串生成一个相似性分数,并将其替换为位字符串。分数的计算方式应类似于
00010011
00100011
更相似,因为受访者选择了相同的选择,除了第三和第四个选择,因此分数必须比
00010011
00000001
更接近

M10,M13
1111000100001000,00000001
101010000001000,00000001
111010000001000,00010011
110010000001100,00100011

thread提供了一些关于比较两个字符串之间的Levenshtein距离的见解。但对于14000行,这将是巨大的计算负担。还有其他方法吗?

Levenshtein编辑距离不是您想要的。它认为A=101010和B=010101非常相似,因为可以通过在开始时添加0和在末尾移除1来将A转换成B。不过,你可能更希望它们被认为是最大的不同,因为它们在每个位置都不同


因此,您需要的只是位字符串的对称差。对两位字符串执行按位异或运算,并计算结果中的1位——每一位对应于两位之间不同的位。

Levenshtein编辑距离不是您想要的。它认为A=101010和B=010101非常相似,因为可以通过在开始时添加0和在末尾移除1来将A转换成B。不过,你可能更希望它们被认为是最大的不同,因为它们在每个位置都不同


因此,您需要的只是位字符串的对称差。对两位字符串执行按位异或运算,并对结果中的1位进行计数——每一位对应于两位字符串之间不同的一位。

这只会帮助我获得两位字符串之间的差异。因此,如果我有10位字符串,我必须将1位字符串与其余9位字符串的差值相加?这只会帮助我得到两位字符串之间的差值。所以,如果我有10位字符串,我必须将差1位字符串与其余9位字符串相加?