【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)
生活随笔
收集整理的這篇文章主要介紹了
【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 DGLGraph圖的創建與維護
1.1 生成DGLGraph圖并且增加頂點與邊
import dgl import torch as th# 邊 0->1, 0->2, 0->3, 1->3 u, v = th.tensor([0, 0, 0, 1]), th.tensor([1, 2, 3, 3]) g = dgl.graph((u, v))print(g) # 圖中節點的數量是DGL通過給定的圖的邊列表中最大的點ID推斷所得出的 # 獲取節點的ID print(g.nodes()) # 獲取邊的對應端點 print(g.edges()) # 獲取邊的對應端點和邊ID print(g.edges(form='all')) # 如果具有最大ID的節點沒有邊,在創建圖的時候,用戶需要明確地指明節點的數量。 g = dgl.graph((u, v), num_nodes=8)1.2 獲得DGLGraph圖的頂點與邊
import dgl import networkx as nx import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文字符 mpl.rcParams['font.family'] = 'STSong' mpl.rcParams['font.size'] = 40 g_dgl = dgl.DGLGraph() # 生成一個空圖 g_dgl.add_nodes(4) # 增加四個頂點 g_dgl.add_edges(list(range(4)),[0]*4) # 增加四條邊 print("頂點",g_dgl.nodes()) # 輸出頂點列表 print("邊:",g_dgl.edges()) # 輸出邊 print("邊索引",g_dgl.edge_id(1,0)) # 輸出邊索引 print("邊屬性",g_dgl.edges[g_dgl.edge_id(1,0)]) # 輸出邊屬性頂點 tensor([0, 1, 2, 3])
邊: (tensor([0, 1, 2, 3]), tensor([0, 0, 0, 0]))
邊索引 1
邊屬性 EdgeSpace(data={})
1.3 刪除DGLGraph圖的頂點與邊
g_dgl.remove_edges(i) # 刪除索引值為i的邊 print(g_dgl.number_of_edges()) # 輸出圖的邊數1.4 清空DGLGraph圖
g_dgl.clear() # 清空圖內容2 查看DGLGraph圖中的度
DGLGraph圖按照邊的方向將度分為兩種:連接其他頂點的度(out)和被其他頂點連接的度。
- in_degree:查詢指定頂點被連接的邊數。
- in_degrees:查詢多個頂點被連接的邊數,默認查詢圖中的全部頂點。
- out_degree:查詢指定頂點連接其他頂點的邊數。
- out_degrees:查詢多個頂點連接其他頂點的邊數,默認查詢圖中的全部頂點。
2.1 代碼實戰:查看DGLGraph圖中的度
import dgl import networkx as nx import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文字符 mpl.rcParams['font.family'] = 'STSong' mpl.rcParams['font.size'] = 40 g_dgl = dgl.DGLGraph() # 生成一個空圖 g_dgl.add_nodes(4) # 增加四個頂點 g_dgl.add_edges(list(range(4)),[0]*4) # 增加四條邊 print(g_dgl.in_degree(0)) # 查詢連接0頂點的度,輸出:4 print(g_dgl.in_degrees([0,1])) # 查詢連接0,1頂點的度,輸出:tensor([4, 0]) print(g_dgl.in_degrees()) # 查詢全部頂點被連接的度,輸出:tensor([4, 0, 0, 0]) print(g_dgl.out_degrees()) # 查詢全部頂點向外連接的度,輸出:tensor([1, 1, 1, 1])3?DGLGraph圖與NetWorkx圖的相互轉化
DGLGraph類在NetWorkx模塊之上進行擴展
3.1?將DGLGraph圖轉成NetWorkx圖并顯示
將DGLGraph圖轉成NetWorkx圖后便可以借助NetWorkx圖的顯示功能來可視化其內部結構。
import dgl import networkx as nx import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文字符 mpl.rcParams['font.family'] = 'STSong' mpl.rcParams['font.size'] = 40 import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'g_dgl = dgl.DGLGraph() # 生成一個空圖 g_dgl.add_nodes(4) # 增加四個頂點 g_dgl.add_edges(list(range(4)),[0]*4) # 增加四條邊nx.draw(g_dgl.to_networkx(),with_labels=True) # 先調用to_networkx()方法,將DGLGraph圖轉成NetWorkx圖,再調用NeWorkx的draw()方法進行顯示。#### Networkx庫中對圖的可視化沒有自環圖的功能3.2 利用NetWorkx圖創建DGLGraph圖
DGLGraph圖可以從NetWorkx圖中轉化而來。
3.2.1 代碼實戰:利用NetWorkx圖創建DGLGraph圖
先調用dgl.DGLGraph()將NetWorkx圖轉化為DGLGraph圖,再調用了DGLGraph圖對象的to_networkx()方法,將DGLGraph圖轉換為NetWorkx圖顯示。
import dgl import networkx as nx import matplotlib.pyplot as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文字符 mpl.rcParams['font.family'] = 'STSong' mpl.rcParams['font.size'] = 40 import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'g_nx = nx.petersen_graph() # 創建一個Networkx類型的無向圖petersen g_dgl = dgl.DGLGraph(g_nx) # 將Networkx類型轉化為DGLGraph plt.figure(figsize=(20,6)) plt.title("Networkx無向圖",fontsize=20) nx.draw(g_nx,with_labels=True) plt.subplots(122) plt.title("DGL有向圖",fontsize=20) nx.draw(g_dgl.to_networkx(),with_labels=True) # 將DGLGraph轉化為Networkx類型的圖4 DGLGraph圖中頂點屬性的操作
4.1 為圖添加節點特征和邊特征
許多圖數據包含節點和邊上的屬性,即節點特征和邊特征。雖然節點特征和邊特征的類型在現實世界中可以是任意的,但是DGLGraph只接受存儲在張量(Tensor)中的屬性,且該屬性必須為數值類型。
4.2 修改頂點屬性
4.3 刪除頂點屬性
DGL庫官方操作指南https://docs.dgl.ai/
總結
以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数名与变量名可以一样吗_p
- 下一篇: RuntimeError: Can‘t