Создавайте однородные графики с помощью библиотеки dgl (Deep Graph Library)
В этой статье мы создадим однородные графы, используя библиотеку dgl (Deep Graph Library). Графы — это не что иное, как набор узлов/вершин и ребер. Кроме того, ребра — это не что иное, как исходные узлы для узлов назначения. Таким образом, все ребра могут быть представлены как (U, V), где U и V — узлы.
G = (V, E)
Требуется пакет
pip install dgl
Что такое библиотека Deep Graph (DGL) в Python?
Библиотека Deep Graph (DGL) — это библиотека Python с открытым исходным кодом, которая помогает исследователям и ученым быстро создавать, обучать и оценивать GNN на своих наборах данных. Это фреймворк-агностик . Создавайте свои модели с помощью PyTorch, TensorFlow или Apache MXNet.
Однородные однонаправленные графы
Ориентированные графы — это графы, имеющие направленные ребра между узлами. Если направленная реберная точка находится от u к v, то v смежна с u, а u смежна с v. В ориентированном графе ребра имеют направления и обозначены стрелкой на ребре. Создание однонаправленного графа, как показано ниже:
Пример:
Данные для построения графика, который имеет вид (U, V). (U[i],V[i]) образует ребро с номером i в графе. Допустимые форматы данных — тензорные. Каждый тензор должен быть одномерным тензором, содержащим идентификаторы узлов. Так что мы получаем узлы и ребра. Итак, здесь ребра равны 0,1 ; 0,2 ; 0,4 ; 1,2 ; 1,3 ; 2,3 ; 2,4 ; 3,4.
Python3
import dgl import torch # source nodes u = torch.tensor([ 0 , 0 , 0 , 1 , 1 , 2 , 2 , 3 ]) # destination nodes v = torch.tensor([ 1 , 2 , 4 , 2 , 3 , 3 , 4 , 4 ]) # Tuple of tensors is passed as argument mygraph = dgl.graph((u, v)) print (mygraph) |
Выход:
Однородные двунаправленные графы
Ребра в двунаправленном графе связаны с обоими конечными направлениями, что делает их двунаправленными. В результате для обхода графа можно использовать любое направление. Граф двунаправленный, так как в нем есть стрелка. В данном примере можно перемещаться по графу как от узла А к узлу В, так и наоборот.
Пример:
Нужно сделать ребра для обоих направлений в двунаправленном графе. В этой ситуации может быть полезен dgl.to bidirected() , который создает новый граф с ребрами в обоих направлениях.
Выход: