(1)点、边
edges = torch.combinations(torch.arange(num_atoms), with_replacement=False).T
edge_index = torch.stack([torch.cat([edges[0], edges[1]]), torch.cat([edges[1], edges[0]])], dim=0)
这段代码是在构建一个简单的无向图,其中节点是原子,边是原子之间的化学键。首先,torch.combinations
函数会生成所有可能的边,其中torch.arange(num_atoms)
用于生成从0到num_atoms-1
的所有整数作为节点。由于这个图是无向的,所以不需要考虑重复的边,因此使用with_replacement=False
进行排列组合。生成的边存储在一个2行N列的张量中,其中N是边的数量。接下来,torch.stack
函数将边对中的两个节点拆分为单独的张量,并且将这些张量沿着第0维度(即行)堆叠在一起,最终形成一个2x2N的张量,其中第一行和第二行分别是源节点和目标节点,代表了每个边连接的两个节点。
每一列表示一条无向边,第一行表示起点,第二行表示终点,即 edge_index[:, i]
表示第i条边的起点和终点。
ps:
在图论中,无向图是由一些节点和它们之间的边组成的,其中每条边都是双向的,即两个节点之间的连接没有方向性。无向图可以用一个集合 G=(V,E) 来表示,其中 V 表示节点的