Частичное упорядочение векторов - PullRequest
0 голосов
/ 01 ноября 2019

Учитывая 5 векторов, таких как:

     X1   X2
    ---------
A = [51, 134]
B = [40, 110]
C = [41, 191]
D = [35, 198]
E = [30, 140]

Я пытаюсь найти похожие векторы, например, если A[X1]>B[X1] и A[X2]>B[X2], мы удаляем B и сохраняем A как «хороший» вектор,Если A[X1]>B[X1] и A[X2]<B[X2], то мы оставляем их обоих. Я пытался использовать косинусное сходство между векторами, но результаты неверны. Например, вышеупомянутые векторы будут иметь только 3 оставшихся «хороших» вектора, A,C,D. Сравнение каждого атрибута и сортировка по столбцам (частичное упорядочение) - вот способ, с которым я собираюсь пойти. Но что, если у меня есть d = 10 атрибуты? Как решить эту проблему?

1 Ответ

0 голосов
/ 03 ноября 2019

Если я правильно понимаю, я думаю, что вы подразумеваете под A[Xi] > B[Xi], вы на самом деле имеете в виду row[Xi] > next_row[Xi].

>>> A = [51, 134]
>>> B = [40, 110]
>>> C = [41, 191]
>>> D = [35, 198]
>>> E = [30, 140]

>>> arr = np.vstack([A, B, C, D, E])
>>> arr
array([[ 51, 134],
       [ 40, 110],
       [ 41, 191],
       [ 35, 198],
       [ 30, 140]])

>>> # (row_i[X1] > row_i+1[X1]) and (row_i[X2] > row_i+1[X2])
>>> cond1 = np.cumprod(arr[:-1] > arr[1:]).all(axis=1)
>>> cond1
array([ True, False, False, False])

>>> # (row_i[X1] > row_i+1[X1]) and (row_i[X2] < row_i+1[X2])
>>> cond2 = (arr[:-1, 0] > arr[1:, 0]) | (arr[:-1, 1] > arr[1:, 1])
>>> cond2
array([ True, False,  True,  True])

>>> cond1 | cond2
array([ True, False,  True,  True])

>>> arr[:-1][cond1 | cond2]
array([[ 51, 134],  # A
       [ 41, 191],  # C
       [ 35, 198]]) # D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...