1 代码
edges = np.array(list(map(idx_map.get, edges_unordered.flatten())),
dtype=np.int32).reshape(edges_unordered.shape)
adj = sp.coo_matrix((np.ones(edges.shape[0]), (edges[:, 0], edges[:, 1])),
shape=(labels.shape[0], labels.shape[0]),
dtype=np.float32)
# build symmetric adjacency matrix
adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)
features = normalize(features)
adj = normalize(adj + sp.eye(adj.shape[0]))
在上述代码中比较难理解的就是构建对称的邻接矩阵那一句,因为在一般的图神经网络模型中,输入的图是无向图所以邻接矩阵是对称矩阵。特别是如果自己构建KNN图的话,对称矩阵这个地方一定要注意。
上述代码的具体解释可以看参考文献,这里不多赘述。需要注意的是构建邻接矩阵是否只有这一种方法?其实不然,最简单的操作是矩阵 A A A加上矩阵 A T A^T AT,但是这种方法有一定局限性,如果矩阵是一个加权的并不是0,1矩阵,或者矩阵本身就存在对称的元素,直接相加就会存在问题。所以使用上述的代码会避免存在的问题。