Python初学者在这里。所以我在尝试仅使用 numpy 库来计算输入矩阵的行之间的结果二进制成对汉明顿距离矩阵时遇到了麻烦。我应该避免循环并使用矢量化。例如,如果我有类似的东西:
[ 1, 0, 0, 1, 1, 0]
[ 1, 0, 0, 0, 0, 0]
[ 1, 1, 1, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)
矩阵应该是这样的:
[ 0, 2, 3]
[ 2, 0, 3]
[ 3, 3, 0]
Run Code Online (Sandbox Code Playgroud)
即如果原始矩阵是 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
Run Code Online (Sandbox Code Playgroud)
然而,它似乎只是返回一个标量值而不是预期的矩阵。我知道我可能在数组/矢量广播方面做错了什么,但我不知道如何解决它。我试过使用 np.sum 而不是 np.count_nonzero 但它们几乎都给了我类似的东西。