【发布时间】:2018-07-14 23:44:18
【问题描述】:
我有一个名为 'sim' 的 numpy ndarray (4 x 4) 表示 4 个项目 (a,b,c,d) 之间的相似度值。
array([[ 1. , 0. , 0.5547002 , 0.73960026],
[ 0. , 1. , 0. , 0.66666667],
[ 0.5547002 , 0. , 1. , 0.33333333],
[ 0.73960026, 0.66666667, 0.33333333, 1. ]])
dataset_u 是一个包含 [a,b,c,d] 的列表 以下代码对数组进行排序,然后根据项目 a、b、c、d 的相似度值确定前 3 个项目(related_count)。
related_count =3
dataidx = np.asarray(dataset_u) # a,b,c,d
indices = np.argsort(-sim, axis=1)
result = np.hstack((dataidx[:, None], dataidx[indices]))
m1 = result.shape[0]
mask = np.c_[[True] * m1, result[:, 1:] != result[:, 0, None]]
final_mat = result[mask].reshape(m1, -1)
dfdownload = pd.DataFrame(final_mat[:, 1:related_count], index=final_mat[:, 0])
df下载:
如何修改上述代码,使其在对数组进行排序之前只考虑 >=0.5 的值? 例如,对于项目“a”,预期的相关项目是“d”、“c”,而对于项目“b”,其相关项目只有“d”(0.66666667)。
【问题讨论】:
-
感谢您的评论,我已经更新了代码。 sim 指的是相似度 ndarray,dataset_u 是 [a,b,c,d] 的列表
-
你的预期输出是什么?
标签: python pandas sorting numpy threshold