如何解决numpy bitwise_并且无法将参数1广播到输出数组
我正在尝试实现矢量化,以解决该问题
Fastest way to get hamming distance for integer array
r = (1 << np.arange(64,dtype=np.uint64))[:,None]
def hamming_distance_v2(a,b):
t = np.bitwise_xor(a,b)
p = np.bitwise_and(t,r)
return np.count_nonzero(p != 0)
例如,我想将2d数组作为第一个参数传递
a = [[127,255],[127,255]]
b = [127,240]
hamming_distance_v1(a,b) -> [4,4]
ValueError: unable to broadcast argument 1 to output array
是否有一种方法可以在当前实现的汉明距离上实现矢量化,或者通过其他方法来计算2d和1d数组之间的距离?
解决方法
根据Q&A链接的答案,他们将进行修改以合并额外的暗部,如下所示。
方法1
def hamming_distance(a,b):
r = (1 << np.arange(8))[:,None]
mask = (a[:,None] & r) != (b & r)
return mask.sum((1,2))
方法2
def hamming_distance_v2(a,None]
xor = np.bitwise_xor(a[:,None],b)
mask = (xor & r) != 0
return mask.sum((1,2))
方法3
另一个与np.unpackbits
-
def hamming_distance_v3(a,b):
a = np.asarray(a,dtype=np.uint8)
b = np.asarray(b,dtype=np.uint8)
m = np.unpackbits(a,axis=1) != np.unpackbits(b)
return m.sum(1)
样品运行-
In [107]: a
Out[107]:
array([[127,255],[127,205],[227,255]])
In [108]: b
Out[108]: array([127,240])
In [109]: hamming_distance(a,b)
Out[109]: array([4,5,8])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。