如何解决将pytorch几何数据样本转换为其对应的折线图
我正在尝试转换火炬几何数据集,以便将其内容表示为原始样本的折线图。我的代码如下所示:
G = to_networkx(data,node_attrs=['x'],edge_attrs=['edge_attr'],to_undirected=not directed)
line_graph = nx.line_graph(G,create_using=nx.Graph)
result = from_networkx(line_graph)
然而,生成的样本没有任何属性,既没有 edge_attr
也没有 x
。同时,标签 y
也不见了。有没有更好的转换方法?
解决方法
如上一个答案所述,属性不会通过 line_graph
传播。由于我只对保留边属性感兴趣,即将边转换为节点,因此我的解决方案如下所示:
original_edge_attrs = data.edge_attr
original_edge_names = [(from_.item(),to_.item()) for from_,to_ in zip(data.edge_index[0,:],data.edge_index[1,:])]
original_edge_to_attr = {e: attr for e,attr in zip(original_edge_names,original_edge_attrs)}
G = to_networkx(data,node_attrs=['x'],edge_attrs=['edge_attr'],to_undirected=not directed)
line_graph = nx.line_graph(G,create_using=nx.DiGraph)
res_data = from_networkx(line_graph)
# Copy original attribtues
res_data.x = torch.stack([original_edge_to_attr[e] for e in line_graph.nodes])
res_data.y = data.y
我希望这对未来的人有所帮助。
,documentation of nx.line_graph
明确指出:
图、节点和边数据不会传播到新图。
因此,您需要自行转换属性。如果我理解正确,您需要将 G
的节点属性分配给 line_graph
中的各个边,edge_attribute
的 G
将成为 {{ 中的节点属性1}}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。