微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

numpy bitwise_并且无法将参数1广播到输出数组

如何解决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]

如果使用2d数组作为第一个参数,则返回以下错误

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 举报,一经查实,本站将立刻删除。