如何根据以下代码创建相似度矩阵?

时间:2019-04-03 16:52:40

标签: python-3.x cluster-analysis categorical-data

我正在尝试通过此链接https://sourceforge.net/projects/gower-distance-4python/files/使用gower功能。我正在尝试将其应用于分类变量数据框。但是我可以看到,当我使用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') 

因为我正在将cat与cat比较,所以我想指定零,并且它的不同之处例如猫与马,猴子与毛茸茸应该是1。我不明白为什么在上述结果中我会得到“?”我想要零。我该如何解决?

1 个答案:

答案 0 :(得分:1)

np.logical_not(xi == xj).astype(int)

输出将是:

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

说明: np.logical_notTrue更改为False,将False更改为Trueastype(int)更改为01