通过python3中numpy库实现汉明距离(Hamming distance)的计算
汉明距离的定义:两个等长字符串s1 与s2 之间的汉明距离定义为将其中一个变为另外一个所需要做的最小替换次数。例如字符串―1111‖与―1001‖之间的汉明距离为2。
应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。
程序实现:
通过对应向量(或矩阵)相减,结果中元素中非零元素个数即为汉明距离
例如:
vector1 = mat([1,1,0,1,0,1,0,0,1])
vector2 = mat([0,1,1,0,0,0,1,1,1])
vector3 = vector1-vector2= [[ 1 0 -1 1 0 1 -1 -1 0]]
通过函数nonzero(vector3)以矩阵的形式返回输入值中非零元素的信息如下:
(matrix([[0, 0, 0, 0, 0, 0]], dtype=int32), matrix([[0, 2, 3, 5, 6, 7]], dtype=int32))
再通过shape函数是读取返回值中矩阵的长度,即为汉明距离的长度。
代码如下:
from numpy import *
vector1 = mat([1,1,0,1,0,1,0,0,1])
vector2 = mat([0,1,1,0,0,0,1,1,1])
vector3 = vector1-vector2
print("vector3 = vector1-vector2",vector3)
smstr = nonzero(vector1-vector2);
print (smstr)
print (shape(smstr[0])[1])
程序运行结果如下:
vector3 = vector1-vector2 [[ 1 0 -1 1 0 1 -1 -1 0]]
(matrix([[0, 0, 0, 0, 0, 0]], dtype=int32), matrix([[0, 2, 3, 5, 6, 7]], dtype=int32))
6