1

我正在尝试使用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
4

1 回答 1

0

我猜你正在运行pytorch_geometric版本 <= 1.7.2。然后该方法from_networkx只有一个参数。只有最新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])

因此,在您的示例中,data.spin如果您使用from_networkx(I).

于 2021-08-18T09:42:59.910 回答