普通邻接矩阵转换为Pyg数据格式
from torch_geometric.data import Data
if self._args.dataset == 'acm':
adj_list, truefeatures, label, idx_train, idx_val, idx_test, adj_fusion = load_acm_mat()
elif self._args.dataset == 'imdb':
adj_list, truefeatures, label, idx_train, idx_val, idx_test, adj_fusion = load_imdb()
features = preprocess_features(truefeatures)
features = torch.FloatTensor(features)
label = torch.FloatTensor(label)
label = torch.argmax(label, dim=1)
self.idx_train = torch.LongTensor(idx_train).to(args.device)
self.idx_val = torch.LongTensor(idx_val).to(args.device)
self.idx_test = torch.LongTensor(idx_test).to(args.device)
edge_index_view0 = sparse_mx_to_torch_sparse_tensor(adj_list[0]).float()._indices() #adj_list[0]._indices()
edge_index_view1 = sparse_mx_to_torch_sparse_tensor(adj_list[1]).float()._indices() #adj_list[1]._indices()
edge_weight_0 = torch.Tensor(np.ones(edge_index_view0.shape[1]))
edge_weight_1 = torch.Tensor(np.ones(edge_index_view1.shape[1]))
data0 = Data(
x=features,
edge_index=edge_index_view0,
edge_attr=edge_weight_0,
y=label)
Pyg数据格式转换为邻接矩阵
adj = coo_matrix(
(np.ones(data.num_edges), (data.edge_index[0].numpy(), data.edge_index[1].numpy())),
shape=(data.num_nodes, data.num_nodes))
这里生成的邻接矩阵权重为全1,如果要生成带权重的邻接矩阵,可以将np.ones(data.num_edges)替换为带权重的tensor
也可以在生成adj矩阵后,再对其normalize