python - 仅考虑非零值的 numpy 数组之间的成对汉明距离

标签 python python-3.x numpy hamming-distance

我想计算二维 numpy 数组的成对汉明距离。

我的数组是

A
array([[-1,  0, -1,  0, -1,  0],
       [ 1,  0,  0,  0,  0,  0],
       [ 0,  0,  1,  1,  1,  0],
       [ 0,  0, -1,  1,  0,  0],
       [ 0,  0,  0,  0, -1,  0]], dtype=int8)

我想计算 A 的行之间的汉明距离,但仅考虑非零值。如果其中一项为零,我们不将其包含在计算中。

我的输出应该是

B
array([[0, 1, 2, 0, 0],
       [1, 0, 0, 0, 0],
       [2, 0, 0, 1, 1],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0]], dtype=int8) 

最佳答案

如果您的数组只有零和一,则您具有以下属性:r1 * r2 将在缺失位置包含 0,在元素不同时包含 -1,在元素相同时包含 +1 。因此,您希望将所有可能的组合相乘,并计算每行小于零的条目数。

您通过广播获取产品:

B = np.count_nonzero(A[:, None, :] * A[None, :, :] < 0, axis=-1)

如果您需要推广并不总是 -1 和 +1 的值,您可以使用类似的技巧来显式检查是否相等。对于两个项目 ab,数量 a * b * (a - b) 将为非零当且仅当两个数量非零且不同:

A1 = A[:, None, :]
A2 = A[None, :, :]
B = np.count_nonzero(A1 * A2 * (A1 - A2), axis=-1)

如果你想明确地写出条件,你可以这样做

np.count_nonzero((A1 != A2) & (A1 != 0) & (A2 != 0), axis=-1)

关于python - 仅考虑非零值的 numpy 数组之间的成对汉明距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61491516/

相关文章:

python - py3k : Maximum Number In Given List - short form

带有特殊字符的 Python 正则表达式

python - 在 Flask 中使用隐藏字段_method 更改请求方法

python - 找到给定数字上方和下方最接近的元素

python - 将带有字符串的结构化 numpy 数组传递给 cython 函数

python - 使用 2 个 FITS 文件将像素转换为波长

python - 如何检查列表中是否存在 np.NaN 和/或 None

python - 如何在 Tensorflow 中获得 LSTM 的测试精度

python - 如何根据某些条件合并数据集的行

python - 将字符串列表转换为逗号分隔的二维 NumPy