给定两个矩阵X1(N,3136)和X2(M,3136)(其中每行中的每个元素都是二进制数),我试图计算汉明距离,以便将X1中的每个元素与X2的所有行进行比较,结果矩阵为(N,M)。
我编写了两个函数来实现此功能(第一个使用numpy帮助,另一个不使用numpy):
def hamming_distance(X, X_train):
array = np.array([np.sum(np.logical_xor(x, X_train), axis=1) for x in X])
return array
def hamming_distance2(X, X_train):
a = len(X[:,0])
b = len(X_train[:,0])
hamming_distance = np.zeros(shape=(a, b))
for i in range(0, a):
for j in range(0, b):
hamming_distance[i,j] = np.count_nonzero(X[i,:] != X_train[j,:])
return hamming_distance
我的问题是,使用两个for循环的下面的函数比使用upper函数的上面的函数慢得多。有没有可能改进第一个函数,以便我只使用一个循环?
PS. 对不起,我的英语不是我的母语,尽管我已经尽力了!
(u != v).mean()
)。 - sascha(1-arr1).dot(arr2.T) + arr1.dot(1-arr2.T)
实际上给出了汉明距离。但是,它比循环更快吗?不幸的是,不是。 :) - ayhan