Как создать матрицу сходства на основе приведенного ниже кода? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь использовать функцию gower по этой ссылке https://sourceforge.net/projects/gower-distance-4python/files/. Я пытаюсь применить ее к моему фрейму данных категориальных переменных.Однако я вижу, что когда я использую функцию gower_distances, у меня в диагоналях есть ненулевые значения (мне нужно, чтобы все они были равны 0).

Я пытался отладить код.Я думаю, что я знаю, где это происходит, и это происходит в функции _gower_distance_row.Есть эта строка кода, которую я не понимаю; sij_cat = np.where (xi_cat == xj_cat, np.zeros_like (xi_cat), np.ones_like (xi_cat)).Но я представлю это в более простом для понимания формате.

Скажем, у меня есть:

xi=np.array(['cat','dog','monkey'])
xj=np.array([['cat','dog','monkey'],['horse','dog','hairy']])
sij_cat = np.where(xi == xj,np.zeros_like(xi),np.ones_like(xi))

Я получаю это в качестве результата:

array([['', '', ''],
       ['1', '', '1']], dtype='<U6') 

, так как я сравниваю кошку с кошкой, я хочу присвоить ноль, и гдеэто отличается, например, кошка против лошади и обезьяна против волосатой, должно быть 1. Я не понимаю, почему в приведенном выше результате я получаю ''?я хочу нули здесь.Как мне это исправить?

1 Ответ

1 голос
/ 03 апреля 2019
np.logical_not(xi == xj).astype(int)

вывод будет:

array([[0, 0, 0],
       [1, 0, 1]])

Объяснение: np.logical_not изменяется True на False и False на True и astype(int) изменяется на 0 и 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...