Pytorch Geometric:如何将第二个或第三个参数传递给 from_networkx?

Pytorch Geometric: How do I pass the 2nd or 3rd arguments to from_networkx?

我正在尝试使用 Pytorch Geometric 中的 from_networkx()。我有一个 networkx Graph 对象作为我的第一个参数,并试图为节点属性提供一个字符串列表。我收到一个错误,当它需要 1 个时我给了它 2 个位置参数。我怎样才能使这段代码起作用或找到解决方法?

下面第一行是nx.get_attributes(I, 'spin').

生成的属性列表
{(0, 0): 1, (0, 1): 1, (0, 2): -1, (0, 3): 1, (1, 0): 1, (1, 1): 1, (1, 2): 1, (1, 3): 1, (2, 0): 1, (2, 1): -1, (2, 2): -1, (2, 3): 1, (3, 0): -1, (3, 1): -1, (3, 2): 1, (3, 3): -1}
Graph with 16 nodes and 32 edges
<class 'networkx.classes.graph.Graph'>
Traceback (most recent call last):
  File "pytorch_test.py", line 222, in <module>
    print(from_networkx(I, ["spin"]))
TypeError: from_networkx() takes 1 positional argument but 2 were given

我猜你是 运行 pytorch_geometric,版本 <= 1.7.2。然后方法 from_networkx had only one parameter. Only the latest from_networkx 有额外的参数。

然而,在引入额外参数之前——并且仍然是默认行为——所有节点属性都被转换:

import networkx as nx

g = nx.karate_club_graph()
print(g.nodes(data=True))
# [(0, {'club': 'Mr. Hi'}), (1, {'club': 'Mr. Hi'}), (2, {'club': 'Mr. Hi'}), ....
import torch
from torch_geometric.utils import from_networkx

data = from_networkx(g)

print(data)
#Data(club=[34], edge_index=[2, 156])

因此,在您的示例中,如果您使用 from_networkx(I)data.spin 应该可以工作。