我有两个numpy数组,它们长度相同且包含二进制值。
import numpy as np
a=np.array([1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0])
b=np.array([1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1])
我希望能够尽可能快地计算它们之间的汉明距离,因为我需要进行数百万次距离计算。
一个简单但速度较慢的选项如下(摘自维基百科):
我希望尽可能快速地计算它们之间的汉明距离,因为我有数百万个这样的距离计算任务。
一种简单但慢的选择是以下方法(来自维基百科):
%timeit sum(ch1 != ch2 for ch1, ch2 in zip(a, b))
10000 loops, best of 3: 79 us per loop
我受到stack overflow上一些答案的启发,想出了更快的选择。
%timeit np.sum(np.bitwise_xor(a,b))
100000 loops, best of 3: 6.94 us per loop
%timeit len(np.bitwise_xor(a,b).nonzero()[0])
100000 loops, best of 3: 2.43 us per loop
我在想是否有更快的方法来计算这个值,可能可以使用Cython来实现?
a
和b
的长度是否与您的真实数据长度相同? - Warren Weckesserscipy.spatial.distance.cdist
或scipy.spatial.distance.pdist
。 - user2034412return (u != v).mean()
。另请参见bitarray。 - denis