0

我正在尝试转换火炬几何数据集,以便其内容表示为原始样本的折线图。我的代码如下所示:

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也消失了。有没有更好的转换方法?

4

2 回答 2

2

如上一个答案中所述,属性不是由 传播的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

我希望这对将来的某人有所帮助。

于 2021-04-28T09:33:49.533 回答
0

文档nx.line_graph明确指出:

图、节点和边数据不会传播到新图。

因此,您需要自行转换属性。如果我理解正确,您需要将节点属性分配给Gin 中的各个边,line_graph并且edge_attributeofG将成为line_graph.

于 2021-04-28T08:37:41.493 回答