我是Python的初学者。我正在尝试使用仅使用numpy库来计算输入矩阵行之间的二进制对比Hamming距离矩阵,但遇到了困难。我需要避免使用循环,并进行向量化处理。例如,如果我有以下内容:
[ 1, 0, 0, 1, 1, 0]
[ 1, 0, 0, 0, 0, 0]
[ 1, 1, 1, 1, 0, 0]
矩阵应该是这样的:
[ 0, 2, 3]
[ 2, 0, 3]
[ 3, 3, 0]
如果原矩阵为A,汉明距离矩阵为B,则B[0,1]=hammingdistance(A[0]和A[1])。在这种情况下,答案为2,因为它们只有两个不同的元素。
因此,对于我的代码,类似于这样:
def compute_HammingDistance(X):
hammingDistanceMatrix = np.zeros(shape = (len(X), len(X)))
hammingDistanceMatrix = np.count_nonzero ((X[:,:,None] != X[:,:,None].T))
return hammingDistanceMatrix
然而,它似乎只返回一个标量值而不是预期的矩阵。我知道我可能在数组/向量广播方面做错了什么,但我无法弄清楚如何修复它。我尝试过使用np.sum而不是np.count_nonzero,但它们基本上都给我类似的结果。
sum
函数即可完成操作。只需返回hammingDistanceMatrix = (arr[:, None, :] != arr).sum(2)
即可。 - Psidom