给定一个1D整数数组,我必须用这些整数的所有可能配对之间的汉明距离来填充2D数组:
即给定[a,b,c,d]
,输出数组应为
[[0, h(a,b), h(a,c), h(a,d)],
[0, 0, h(b,c), h(b,d)],
[0, 0, 0, h(c,d)],
[0, 0, 0, 0]]
其中h(a,b)是两个数字之间的汉明距离。
import numpy as np
# given that a and b are np.uint8
def hamming_distance(a, b):
return np.count_nonzero(np.unpackbits(np.bitwise_xor(a,b)))
def pairings(arr):
a = np.zeros((len(arr), len(arr)))
for i in range(len(arr) - 1):
for j in range(i + 1, len(arr)):
a[i,j] = hamming_distance(arr[i], arr[j])
return a
我想知道是否有一种方法可以更有效地执行此操作,因为配对矩阵必须被计算数万次,并且double for循环的执行效果非常差。