python - 在python中将coo格式转换为边权重
问题描述
我想制作标签数组,以便使用 GNN 输出中的 BCE 计算损失。我有的
import torch
edge_index = [[0, 0, 0, 2, 2, 2, 3, 4, 5], [2, 3, 4, 3, 4, 5, 4, 5, 6]]
edge_index_gt = [[0, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
out_put = torch.rand(edge_index.shape[1]
边缘索引指示一个节点是否连接到另一个节点。例如在这种情况下,节点 0 将连接到节点 2、3 和 4。edge_index 和 edge_index_gt 都具有形状 [2, number of edges]。我想让输出像这样
label = [1, 0, 0, 1, 0, 0, 1, 1, 1]
形状等于 edge_index 数组中的边数。
我试过的
label = torch.zeros_like(out_put)
for i, val in enumerate(zip(edge_index[0], edge_index[1])):
if val in zip(edge_index_gt[0], edge_index_gt[1]):
label[i] = 1
如您所见,此代码采用 O(N*M) 其中 N 是 edge_index 数组中的元素数, M 是 edge_index_gt 中的元素数
有什么办法可以让事情变得更好吗?谢谢
解决方案
推荐阅读
- php - PHP curl_exec 在没有错误日志的情况下停止执行脚本的其余部分
- javascript - 在 React 中单击时删除项目
- postgresql - Spring Boot 2.2.2 和“hibernate.hbm2ddl.auto=(create|create-drop|update|validate)”不起作用
- angular - Angular,ngrx - 选择器中的不定式循环问题
- javascript - Node Cluster 模块,与Passenger不兼容
- jquery - 如何使用 calc 和 css 将图像水平居中
- javascript - 405:不允许 - 我怎么知道 XMLHttpRequest 把我带到了哪里?
- swift - 将服务器私钥放在 Xcode 项目上的最佳位置
- angular - 垫输入占位符位置
- java - 带有用户访问令牌的 BigQuery 客户端 Java API