邻接矩阵与Pyg数据格式互相转换

普通邻接矩阵转换为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

你可能感兴趣的:(python,numpy,深度学习)