【发布时间】:2017-08-02 19:38:39
【问题描述】:
这里是 Python 初学者。因此,我在尝试仅使用 numpy 库计算输入矩阵的行之间生成的二进制成对汉明顿距离矩阵时遇到了麻烦。我应该避免循环并使用矢量化。例如,如果我有类似的东西:
[ 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] = 汉明距离(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 但它们几乎都给了我类似的东西。
【问题讨论】:
标签: python numpy vectorization hamming-distance