日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图论与复杂网络建模工具Networkx的四种网络模型

發布時間:2024/8/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图论与复杂网络建模工具Networkx的四种网络模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Networkx的四種網絡模型

  • 一. Networkx的下載安裝
  • 二. 規則圖
  • 三、ER隨機圖
  • 四、WS小世界網絡
  • 五、BA無標度網絡
  • 六. 總結

NetworkX提供了4種常見網絡的建模方法,分別是:規則圖,ER隨機圖,WS小世界網絡和BA無標度網絡。

一. Networkx的下載安裝

畫圖之前先將NetworkX裝好,直接pip install Networkx的話會特別慢,而且通常會失敗,所以我一般都是先把庫下載下來,再在本地安裝。

1、下載傳送門:https://pypi.org/project/networkx/#files
我下載的這個:
2、放到自己指定的文件夾(隨意)
3、本地安裝

二. 規則圖

規則圖差不多是最沒有復雜性的一類圖,random_graphs.random_regular_graph(d, n)方法可以生成一個含有n個節點,每個節點有d個鄰居節點的規則圖。
下面一段示例代碼,生成了包含20個節點、每個節點有3個鄰居的規則圖:

import networkx as nx import matplotlib.pyplot as plt #生成了包含20個節點、每個節點有3個鄰居的規則圖 RG = nx.random_graphs.random_regular_graph(3, 20) #spectral布局 pos = nx.spectral_layout(RG)nx.draw(RG, pos, with_labels = False, node_size = 30) plt.show()

三、ER隨機圖

ER隨機圖是早期研究得比較多的一類“復雜”網絡,模型的基本思想是以概率p連接N個節點中的每一對節點。
用random_graphs.erdos_renyi_graph(n,p)方法生成一個含有n個節點、以概率p連接的ER隨機圖:

import networkx as nx import matplotlib.pyplot as plt #生成一個含有20個節點、以概率p = 0.2連接的ER隨機圖: ER = nx.random_graphs.erdos_renyi_graph(20, 0.2) #shell布局 pos = nx.shell_layout(ER) nx.draw(ER, pos, with_labels = False, node_size = 30) plt.show()

四、WS小世界網絡

用random_graphs.watts_strogatz_graph(n, k, p)方法生成一個含有n個節點、每個節點有k個鄰居、以概率p隨機化重連邊的WS小世界網絡。

import networkx as nx import matplotlib.pyplot as plt #生成一個含有20個節點、每個節點有4個鄰居、以概率p=0.3隨機化重連邊的WS小世界網絡 WS = nx.random_graphs.watts_strogatz_graph(20, 4, 0.3) # circular 布局 pos = nx.circular_layout(WS) nx.draw(WS, pos, with_labels = False, node_size = 30) plt.show()

五、BA無標度網絡

用random_graphs.barabasi_albert_graph(n, m)方法生成一個含有n個節點、每次加入m條邊的BA無標度網絡。

import networkx as nx import matplotlib.pyplot as plt #生成一個含有20個節點、每次加入1條邊的BA無標度網絡。 BA = nx.random_graphs.barabasi_albert_graph(20, 1) # spring 布局 pos = nx.spring_layout(BA) nx.draw(BA, pos, with_labels = False, node_size = 30) plt.show()

六. 總結

(1)基本繪圖流程:
在NetworkX中,繪制一個網絡使用nx.draw()方法,它至少接受一個參數:即你希望繪制的網絡G。實際上這個方法非常復雜,它可以指定20多個關鍵字參數,后邊會介紹一些常用的參數,我們先從最簡單的情況入手,看看下邊的例子:

import networkx as nx #導入networkx包 import matplotlib.pyplot as plt #導入繪圖包matplotlib(需要安裝,方法見第一篇筆記) G =nx.random_graphs.barabasi_albert_graph(100,1) #生成一個BA無標度網絡G nx.draw(G) #繪制網絡G #plt.savefig("ba.png") #輸出方式1: 將圖像存為一個png格式的圖片文件 plt.savefig("ba_svg.svg") #svg矢量圖通常放入自己的論文中 plt.show() #輸出方式2: 在窗口中顯示這幅圖像


(2)運用樣式
上邊的代碼雖然簡單,但生成的圖形略顯單調。NetworkX提供了一系列樣式參數,可以用來修飾和美化圖形,達到我們想要的效果。常用的參數包括:
- node_size: 指定節點的尺寸大小(默認是300,單位未知,就是上圖中那么大的點)
- node_color: 指定節點的顏色 (默認是紅色,可以用字符串簡單標識顏色,例如’r’為紅色,'b’為綠色等,具體可查看手冊)
- node_shape: 節點的形狀(默認是圓形,用字符串’o’標識,具體可查看手冊)
- alpha: 透明度 (默認是1.0,不透明,0為完全透明)
- width: 邊的寬度 (默認為1.0)
- edge_color: 邊的顏色(默認為黑色)
- style: 邊的樣式(默認為實現,可選: solid|dashed|dotted,dashdot)
- with_labels: 節點是否帶標簽(默認為True)
- font_size: 節點標簽字體大小 (默認為12)
- font_color: 節點標簽字體顏色(默認為黑色)
靈活運用上述參數,可以繪制不同樣式的網絡圖形,例如:nx.draw(G,node_size = 30,with_labels = False) 是繪制節點尺寸為30、不帶標簽的網絡圖。

(3)運用布局
NetworkX在繪制網絡圖形方面提供了布局的功能,可以指定節點排列的形式。這些布局包括:
circular_layout:節點在一個圓環上均勻分布
random_layout:節點隨機分布
shell_layout:節點在同心圓上分布
spring_layout: 用Fruchterman-Reingold算法排列節點(這個算法我不了解,樣子類似多中心放射狀)
spectral_layout:根據圖的拉普拉斯特征向量排列節點?我也不是太明白
布局用pos參數指定,例如:nx.draw(G,pos = nx.circular_layout(G))。

我的第二篇博客,部分參考了他人的,參考鏈接在底部。初學者,歡迎交流!
參考:https://www.cnblogs.com/forstudy/archive/2012/03/20/2407954.html
https://www.cnblogs.com/gispathfinder/p/5790949.html

總結

以上是生活随笔為你收集整理的图论与复杂网络建模工具Networkx的四种网络模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。