1. 程式人生 > >NetworkX系列教程(11)-graph和其他數據格式轉換

NetworkX系列教程(11)-graph和其他數據格式轉換

sha 小書匠 ans mar http 導入 src 如果 apt

小書匠 Graph 圖論

學過線性代數的都了解矩陣,在矩陣上的文章可做的很多,什麽特征矩陣,單位矩陣等.grpah存儲可以使用矩陣,比如graph的鄰接矩陣,權重矩陣等,這節主要是在等到graph後,如何快速得到這些信息.詳細官方文檔在這裏

目錄:

  • 12.graph和其他數據格式轉換
    • 12.1graph與字典(Dict)
    • 12.2graph與列表(List)
    • 12.3graph與numpy
    • 12.4graph與Scipy
    • 12.5graph與Pandas

註意:如果代碼出現找不庫,請返回第一個教程,把庫文件導入.

12.graph和其他數據格式轉換

12.1graph與字典(Dict)

  1. #從字典生成圖
  2. dod = {0: {1: {‘weight‘: 1}}}
  3. G = nx.from_dict_of_dicts(dod) #或G=nx.Graph(dpl)
  4. plt.subplots(1,1,figsize=(6,3))
  5. nx.draw(G, with_labels=True, font_weight=‘bold‘)
  6. plt.axis(‘on‘)
  7. plt.xticks([])
  8. plt.yticks([])
  9. plt.show()
  10. #圖轉換為字典
  11. print(nx.to_dict_of_dicts(G))

技術分享圖片
graph與字典(Dict)示例

輸出:

{0: {1: {‘weight‘: 1}}, 1: {0: {‘weight‘: 1}}}


12.2graph與列表(List)

  1. #從列表中創建graph
  2. dol = {0: [1,2,3]}
  3. edgelist = [(0, 1),(0,3),(2,3)]
  4. G1 = nx.from_dict_of_lists(dol) #或G=nx.Graph(dol)
  5. G2=nx.from_edgelist(edgelist)
  6. #顯示graph
  7. plt.subplots(1,2,figsize=(15,3))
  8. plt.subplot(121)
  9. nx.draw(G1, with_labels=True, font_weight=‘bold‘)
  10. plt.axis(‘on‘)
  11. plt.xticks([])
  12. plt.yticks([])
  13. plt.subplot(122)
  14. nx.draw(G2, with_labels=True, font_weight=‘bold‘)
  15. plt.axis(‘on‘)
  16. plt.xticks([])
  17. plt.yticks([])
  18. plt.show()
  19. #graph轉list
  20. print(nx.to_dict_of_lists(G1))
  21. print(nx.to_edgelist(G1))

技術分享圖片
graph與列表(List)示例

輸出:

{0: [1, 2, 3], 1: [0], 2: [0], 3: [0]}
[(0, 1, {}), (0, 2, {}), (0, 3, {})]


12.3graph與numpy

  1. #從numpy創建graph
  2. import numpy as np
  3. a = np.reshape(np.random.random_integers(0, 1, size=100), (10, 10))
  4. D = nx.DiGraph(a)
  5. nx.draw(D, with_labels=True, font_weight=‘bold‘)
  6. plt.axis(‘on‘)
  7. plt.xticks([])
  8. plt.yticks([])
  9. plt.show()
  10. #graph返回numpy
  11. G=nx.Graph()
  12. G.add_edge(1, 2, weight=7.0, cost=5)
  13. A1 = nx.to_numpy_matrix(G)
  14. A2 = nx.to_numpy_recarray(G, dtype=[(‘weight‘, float), (‘cost‘, int)])
  15. print(A1,A2)

技術分享圖片
graph與numpy示例

輸出:

  1. [[0. 7.]
  2. [7. 0.]] [[(0., 0) (7., 5)]
  3. [(7., 5) (0., 0)]]

12.4graph與Scipy

  1. #從scipy創建graph
  2. G.clear()
  3. import scipy as sp
  4. A = sp.sparse.eye(2, 2, 1)
  5. G = nx.from_scipy_sparse_matrix(A)
  6. nx.draw(D, with_labels=True, font_weight=‘bold‘)
  7. plt.axis(‘on‘)
  8. plt.xticks([])
  9. plt.yticks([])
  10. plt.show()
  11. #graph返回scipy
  12. A = nx.to_scipy_sparse_matrix(G)
  13. print(A.todense())

技術分享圖片
graph與Scipy示例

輸出:

  1. [[0. 1.]
  2. [1. 0.]]

12.5graph與Pandas

  1. #從pandas創建graph
  2. G.clear()
  3. import pandas as pd
  4. df = pd.DataFrame([[1, 1], [2, 1]])
  5. G = nx.from_pandas_adjacency(df)
  6. nx.draw(D, with_labels=True, font_weight=‘bold‘)
  7. plt.axis(‘on‘)
  8. plt.xticks([])
  9. plt.yticks([])
  10. plt.show()
  11. #graph返回scipy
  12. df = nx.to_pandas_adjacency(G)
  13. print(df)

技術分享圖片
graph與Pandas示例

輸出:

  1. 0 1
  2. 0 1.0 2.0

NetworkX系列教程(11)-graph和其他數據格式轉換