I have a tensor which contains indices that correspond to nodes in two different graphs that were chosen based of some criteria. So let’s say
indices = tensor([[0, 1], [3, 2]]. This means that in the first graph, the node with index 0 and in the second graph the node with index 1 were chosen. Also, in the first graph the node with index 3 and in the second graph the node with index 2 were chosen. This kind of format is necessary in my case.
Now i need to compare each element in
indices with each other with a function called
is_adjacent to see which pair of nodes i still need.
My current solution:
edge_index =  for k, i in enumerate(indices): for l, j in enumerate(indices): if _is_adjacent(i, j, graph_1) and _is_adjacent(i, j, graph_2): edge_index.append([k,l]) edge_index = torch.tensor(edge_index, dtype=torch.float)
Where the following function is used:
def _is_adjacent(id_a, id_b, graph): tens = [id_a, id_b] adjacency_matrix = torch.reshape(graph.edge_index, (-1,2)).tolist() return tens in adjacency_matrix
This works as it should, but it is not really fast. i would like to replace my for loops with some kind of vectorization.
I hope this makes sense.