我目前正在使用PyG开发一个推荐系统.

edge_index = tensor([[   0,    0,    0,  ..., 9315, 9317, 9317],
         [ 100,  448,  452,  ...,  452,    1,  307]], device='cuda:0')}

edge_index[0]包含学生索引,edge_index[1]包含连接模块的索引(两者的长度相同).因此,edge_index[0][i]是边缘i的源 node ,edge_index[1][i]是边缘i的目的地.

在模型训练之后,我将生成一个2D张量recs,形状为#of Students x#of Modules,值为0-1.0=不推荐,1=推荐.recs可能是这样的:

recs = tensor([0.54, 0.23, 0.98, ..., 0.12, 0.43, 0.87],
              ...,
              [0.43, 0.53, 0.12, ..., 0.92, 0.12, 0.53])

当然,如果学生已经学习了某个模块,我不想推荐它.有没有办法将原始图形的所有边设置为零,方法是使用PyG的edge_index作为坐标或其他什么?

基本上,我想将特定值设置为recs到0,如下所示:

for i in range(0, len(edge_index[0])):
  recs[edge_index[0][i]][edge_index[1][i]] = 0

有没有办法使用张量函数来实现这一点?

推荐答案

由于您希望在两个轴上同时索引recs,直接的实现是将for循环矢量化为:

>>> recs[edge_index[0], edge_index[1]] = 0

您可以通过将edge_index分为101进行改进:

>>> recs[tuple(edge_index)] = 0

Python相关问答推荐

螺旋桨图上意外颠倒的次y轴

如果在第一行之前不存在其他条件,如何获得满足口罩条件的第一行?

在Python中是否可以输入使用任意大小参数列表的第一个元素的函数

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

为什么我的代码会进入无限循环?

Pandas 群内滚动总和

将列表中的元素替换为收件箱中的元素

如何观察cv2.erode()的中间过程?

替换字符串中的点/逗号,以便可以将其转换为浮动

指示组内的rejected_time是否在creation_timestamp后5分钟内

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

如何用symy更新分段函数

Pandas 填充条件是另一列

仿制药的类型铸造

重新匹配{ }中包含的文本,其中文本可能包含{{var}

Pandas 有条件轮班操作

使用索引列表列表对列进行切片并获取行方向的向量长度

如何在polars(pythonapi)中解构嵌套 struct ?

Pandas:将多级列名改为一级

启动带有参数的Python NTFS会导致文件路径混乱