如何使用python中的networkx來生成一個(gè)圖
python networkx來生成一個(gè)圖
使用python提供的第三方的庫networkx,networkx是專門用來生成圖論和網(wǎng)絡(luò)科學(xué)里面各種圖及其各種計(jì)算函數(shù)的。
(a).如果已知一個(gè)圖的圖形,如何將其生成對(duì)應(yīng)的鄰接矩陣,這個(gè)在networkx里面提供了函數(shù)nx.to_numpy_matrix(G)來完成
(b).如果已知一個(gè)圖的鄰接矩陣,如何將其轉(zhuǎn)化成對(duì)應(yīng)的圖形
代碼如下:
# -*- coding: utf-8 -*- """ Created on Sun Jun 16 20:13:42 2019 @author: Administrator """ """ 這個(gè)函數(shù)的作用是將一個(gè)矩陣給轉(zhuǎn)換成一個(gè)圖, 矩陣以多維列表的形式存在,即列表的列表 此處的轉(zhuǎn)換是針對(duì)無向圖 根據(jù)鄰接矩陣得到圖之后,我們就可以調(diào)用networkx 里面的各種函數(shù)來分析圖的性質(zhì),比如度分布, 平均路徑程度,聚類系數(shù)等一系列圖的拓?fù)湫再|(zhì) """ import networkx as nx def matrix_to_graph(): G = nx.Graph() #matrix為鄰接矩陣,以多維列表的形式存在 matrix = [[0, 1, 1],[1,0,1],[1,1,0]] nodes = range(len(matrix)) G.add_nodes_from(nodes) for i in range(len(matrix)): for j in range(len(matrix)): if(matrix[i][j] == 1): G.add_edge(i, j) position = nx.circular_layout(G) nx.draw_networkx_nodes(G,position, nodelist=nodes, node_color="r") nx.draw_networkx_edges(G,position) nx.draw_networkx_labels(G,position) print(nx.to_numpy_matrix(G)) matrix_to_graph()
運(yùn)行結(jié)果如下:
networkx隨機(jī)圖生成
導(dǎo)入包
import networkx as nx ? #導(dǎo)入networkx包 import random?? ??? ??? ?#導(dǎo)入random包 import matplotlib.pyplot as plt #導(dǎo)入畫圖工具包
新建圖
G = nx.Graph()?? ??? ??? ?#建立無向圖 H = nx.path_graph(100)?? ?#添加節(jié)點(diǎn) G.add_nodes_from(H)?? ??? ?#添加節(jié)點(diǎn)
隨機(jī)概率添加邊的函數(shù)
def rand_edge(vi,vj,p=0.2):?? ??? ?#默認(rèn)概率p=0.1 ? ? probability =random.random()#生成隨機(jī)小數(shù) ? ? if(probability<p):?? ??? ??? ?#如果小于p ? ? ? ? G.add_edge(vi,vj) ??? ??? ?#連接vi和vj節(jié)點(diǎn)
添加邊
i=0 while (i<100): ? ? j=0 ? ? while(j<i): ? ? ? ? ? ? rand_edge(i,j)?? ??? ?#調(diào)用rand_edge() ? ? ? ? ? ? j +=1 ? ? i +=1
matplotlib畫圖
連通子圖
number_components = nx.number_connected_components(G)? largest_components = max(nx.connected_components(G), key=len) print("最大連通子圖:" + str(largest_components)) print("最大連通子圖長(zhǎng)度:"+ str(len(largest_components))) print("連通子圖個(gè)數(shù): "+str(nx.number_connected_components(G)))
節(jié)點(diǎn)的度
nx.degree(G) DVweight = G.degree() degree_sum = sum(span for n, span in DVweight) ?? ??? ?#各節(jié)點(diǎn)度數(shù)之和 degree_max = max(span for n, span in DVweight)?? ??? ?#節(jié)點(diǎn)最大度數(shù)
代碼
import networkx as nx #導(dǎo)入networkx包 import random #導(dǎo)入random包 import matplotlib.pyplot as plt G = nx.Graph() H = nx.path_graph(100) G.add_nodes_from(H) def rand_edge(vi,vj,p=0.2): probability =random.random() if(probability<p): G.add_edge(vi,vj) i=0 while (i<100): j=0 while(j<i): rand_edge(i,j) j +=1 i +=1 number_components = nx.number_connected_components(G) largest_components = max(nx.connected_components(G), key=len) nx.degree(G) DVweight = G.degree() degree_sum = sum(span for n, span in DVweight) #各節(jié)點(diǎn)度數(shù)之和 degree_max = max(span for n, span in DVweight) #節(jié)點(diǎn)最大度數(shù) print("度數(shù)之和: " + str(degree_sum)) print("節(jié)點(diǎn)最大度數(shù):" + str(degree_max)) print("最大連通子圖:" + str(largest_components)) print("最大連通子圖長(zhǎng)度:"+ str(len(largest_components))) print("連通子圖個(gè)數(shù): "+str(nx.number_connected_components(G))) nx.draw_networkx(G, with_labels=True) plt.show()
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python networkx中獲取圖的鄰接矩陣方式
- python?NetworkX庫生成并繪制帶權(quán)無向圖
- Python利用networkx畫圖繪制Les?Misérables人物關(guān)系
- Python networkx包的實(shí)現(xiàn)
- 使用Python的networkx繪制精美網(wǎng)絡(luò)圖教程
- python networkx 根據(jù)圖的權(quán)重畫圖實(shí)現(xiàn)
- python networkx 包繪制復(fù)雜網(wǎng)絡(luò)關(guān)系圖的實(shí)現(xiàn)
- Python 學(xué)習(xí)教程之networkx
- python中networkx函數(shù)的具體使用
相關(guān)文章
Python configparser模塊配置文件解析與應(yīng)用探究
在Python中,configparser模塊是用于處理配置文件的重要工具,本文將全面探討configparser模塊的使用方法,包括讀取、修改、寫入配置文件,以及如何在實(shí)際項(xiàng)目中應(yīng)用該模塊,結(jié)合豐富的示例代碼,將深入剖析該模塊的功能和靈活性2024-01-01Python異步在非阻塞子進(jìn)程中運(yùn)行命令詳解
這篇文章主要為大家介紹了Python異步在非阻塞子進(jìn)程中運(yùn)行命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03中秋節(jié)老家要貼對(duì)聯(lián)之python無線對(duì)聯(lián)生成器
適逢中秋老家居然有在中秋貼對(duì)聯(lián)的習(xí)俗,于是自己開機(jī)立馬寫了一個(gè)對(duì)聯(lián)生成器,文中給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有參考價(jià)值2021-09-09Python實(shí)現(xiàn)網(wǎng)絡(luò)端口轉(zhuǎn)發(fā)和重定向的方法
這篇文章主要介紹了Python實(shí)現(xiàn)網(wǎng)絡(luò)端口轉(zhuǎn)發(fā)和重定向的方法,結(jié)合實(shí)例形式分析了Python基于threading和socket模塊實(shí)現(xiàn)端口轉(zhuǎn)發(fā)與重定向的具體操作技巧,需要的朋友可以參考下2016-09-09