Тернарная функция для расстояния Хэмминга, где '2' является подстановочным знаком - PullRequest
0 голосов
/ 11 октября 2019

Допустим, у меня есть следующий массив векторов x, где возможные значения 0,1,2:

 import numpy as np
 x = np.random.randint(0,3,(10,5), dtype=np.int8)

Я хочу сделать сопоставление сходства для всех векторов с нулевым расстоянием Хэмминга илиодин, где правила для сопоставления:

 1. 0 == 0 and 1 == 1 i.e. hamming distance is 0
 2. 2 match both 1 and 0 i.e. hamming distance is 0
 3. otherwise Hamming distance is 1

т.е. найти некоторую арифметическую операцию, которая будет возвращать:

0 x 0 = 0
1 x 1 = 0
0 x 1 = 1
1 x 0 = 1
0 x 2 = 0
1 x 2 = 0

И мой вывод должен быть расстояние Хемминга между каждым вектором (строка) x и произвольный вектор z:

z = np.random.randint(0,2,5)
np.sum(np.add(x,z) == 1, axis=1)

Ответы [ 2 ]

4 голосов
/ 11 октября 2019
int(x+y == 1)

Что-то в этом вопросе мне не хватает ???

0 голосов
/ 11 октября 2019

Разве это не поможет?

((x!=y) ^ (x==2) ^ (y==2)).sum() <=1

Или если вы хотите разрешить два с обеих сторон

((x!=y) ^ (x==2) | (y==2)).sum() <=1
...