본문 바로가기

DL & ML/Graph

[DGL] remove_edges로 그래프 내 특정 edge 제거하기

728x90
반응형
 

dgl.DGLGraph.remove_edges — DGL 0.8.0 documentation

© Copyright 2018, DGL Team. Revision 58346042.

docs.dgl.ai

 

DGL 라이브러리를 사용하여 만든 그래프에서 특정 엣지를 제거하고 싶을 때는 remove_edges를 사용하면 된다!

heterogeneous graph에서의 예시는 dgl 문서에 쉬운 예제로 잘 설명되어있다.

 

 

>>> g = dgl.heterograph({
...     ('user', 'plays', 'game'): (torch.tensor([0, 1, 1, 2]),
...                                 torch.tensor([0, 0, 1, 1])),
...     ('developer', 'develops', 'game'): (torch.tensor([0, 1]),
...                                         torch.tensor([0, 1]))
...     })

>>> g.remove_edges(torch.tensor([0, 1]), 'plays')
>>> g.edges('all', etype='plays')
(tensor([0, 1]), tensor([0, 0]), tensor([0, 1]))

 

remove_edges(제거할 edge id, 제거할 엣지 type) 으로 간단하게 edge를 제거할 수 있다!

나는 예제를 대충 읽고..ㅋㅋ 제거할 edge id가 아니라 제거할 node의 id를 넣는 거라고 생각해서 처음에 시간을 헛되게 좀 보냈었다..!

 

특정 edge의 id를 알고 싶으면 edge_ids를 통해 알아낼 수 있다!

 

 

dgl.DGLGraph.edge_ids — DGL 0.8.0 documentation

© Copyright 2018, DGL Team. Revision 58346042.

docs.dgl.ai

 

 

>>> g = dgl.heterograph({
...     ('user', 'follows', 'user'): (torch.tensor([0, 1]), torch.tensor([1, 2])),
...     ('user', 'follows', 'game'): (torch.tensor([0, 1, 2]), torch.tensor([1, 2, 3])),
...     ('user', 'plays', 'game'): (torch.tensor([1, 3]), torch.tensor([2, 3]))
... })
>>> g.edge_ids(torch.tensor([1]), torch.tensor([2]), etype='plays')
tensor([0])

 

user 1과 game 2 사이의 edge id를 구하는 방법의 예제는 위와 같다!

 

이런 식으로 특정 노드 사이의 edge id를 구한 후, remove_edges에 해당하는 edge id를 넣어주면 쉽게 제거 가능하다.

728x90
반응형