728x90
반응형
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를 통해 알아낼 수 있다!
>>> 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
반응형
'DL & ML > Graph' 카테고리의 다른 글
[논문] HMSG : Heterogeneous Graph Neural network based on Metapath Subgraph Learning (0) | 2022.03.09 |
---|---|
[DGL] RelGraphConv에서 IndexError: index out of range in self 문제! (0) | 2022.03.07 |
[DGL] heterogeneous graph를 homogeneous graph로 변환할 때 edata, ndata 함께 전달하기 (0) | 2022.03.07 |
[DGL] TypeError : default_collate 에러 (DGL.batch, collate_fn) (0) | 2022.03.03 |
[DGL] 기본 message passing layer 만들기 (0) | 2022.02.04 |