pytorch+numpy实现,按行从大到小排序 ,找出值大于0.5所对应的行列值。
代码import torch x = torch.randn(3,4) print(x) sorted, indices = torch.sort(x, descending=True) #按行从大到小排序 (即反序) print(sorted) print(indices) # sorted[:, sorted[:,]>0.5] mz_items = sorted[:,] > 0.5 print(mz_items) import numpy as np mz_items_np = mz_items.numpy() index = np.argwhere( mz_items_np == True ) print(index) index[:, 1] = index[:, 1] + 3 # [0, n_items) -> [n_users, n_users+n_items) vals = sorted[mz_items] adj = sp.coo_matrix((vals, (index[:, 0], index[:, 1])), shape=(7, 7)) print(adj)
结果:
tensor([[-1.3632, 1.2630, 1.3667, 0.1094],
[ 0.0844, -0.3690, -0.6069, -0.0294],
[-0.0415, -0.6528, 2.1679, 0.4352]])
tensor([[ 1.3667, 1.2630, 0.1094, -1.3632],
[ 0.0844, -0.0294, -0.3690, -0.6069],
[ 2.1679, 0.4352, -0.0415, -0.6528]])
tensor([[2, 1, 3, 0],
[0, 3, 1, 2],
[2, 3, 0, 1]])
tensor([[ True, True, False, False],
[False, False, False, False],
[ True, False, False, False]])
[[0 0]
[0 1]
[2 0]]
(0, 3) 1.3667
(0, 4) 1.2630
(2, 3) 2.1679



