我有一个名为'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])
dfdownload:
如何修改上面的代码,以便在排序数组之前只考虑值> = 0.5? 例如,对于项目“a”,预期的相关项目为“d”,“c”,而对于项目“b”,其相关项目仅为“d”(0.66666667)。
答案 0 :(得分:0)
我对numpy
和pandas
都很陌生,所以这可能不是最好的方法,我希望它能引导您找到更好的解决方案。
sim_copy = sim.copy()
sim_copy[sim_copy <= 0.5] = 0
bool_sim = np.asarray(sim_copy, dtype=bool)
dfdownload.mask(~bool_sim[:, :-1])
# -1 can be replaced with related_count, but its value seems wrong.
输出
0 1 2
a d NaN b
b NaN a NaN
c a NaN d
d a b NaN
另一方面,related_count的值应为4而不是3,但我再也不确定:)。