import numpy as np
a = score_matrix
a[np.diag_indices_from(a)] = 0
set([tuple(sorted(np.array(cmp_list)[(np.c_[[i],np.where(j>0.5)])][0]))for i,j in enumerate(a) if any(j>0.5)])
{('Home Depot', 'Home Depot', 'Home Depot Center'),
('Walmart', 'Walmart super')}
另一种方式:
def relation(x,dat):
k = sorted(np.unique(np.r_[dat[1][np.in1d(dat[0],x)],x,dat[0][np.in1d(dat[1],x)]]))
if k==x: return k
else: return relation(k,dat)
def rel(a,cmp_list):
a[np.diag_indices_from(a)] = 0
mat = np.where(a>0.5)
ind = list(np.unique(mat[0]))
w = []
while ind:
k = relation([ind[0]],mat)
w.append(list(np.array(cmp_list)[k]))
if any(np.in1d(ind,k)):
ind = list(np.array(ind)[~np.in1d(ind,k)])
if len(ind)>0:
del ind[0]
return w
rel(score_matrix,cmp_list)
[['Walmart', 'Walmart super'],
['Home Depot', 'Home Depot Center', 'Home Depot']]